自由软件,自由社会 理查德·斯托曼选集(第三版) [美] Richard m. stallman著北京 GNU/LinuX用户组译 2019年04月 2本书基于GNU自由文档协议1.3版( GNU Free documentation license1.3) 授权发布,可自由复制和分发,和/或基于GNU自由文档协议1.3版或自由软 件基金会发布的更高版本,做出修改。本书使用 Markdown书写,源码地址https://github.com/beijinglug/fsfs-zh/ ==========第1页========== Copyright2019beIjingGnu/lInuxUserGroup Permission is granted to copy, distribute and/or modify this document under the terms of the gnu free documentation license. version 1.3 or any later version published by the Free Software Foundation: with no invariant sections no front -Cover Texts and no back Cover texts A copy of the license is included in the section entitled"GNU Free Documentation license ==========第2页========== 译者序 Copyright C2019北京 GNU/Linux用户组 https://beijinglug.club 《自由软件,自由社会:理查德·斯托曼选集》( Free Software,Fre Society:! Selected Essays of Richard M. Stallman)是一本指导了无数人的书籍,它将理査德·斯托曼的自由软件哲学和思想,阐述得淋漓尽致,此书第一版首发于2002年。也是在2002年,北京 GNU/Linux用户组(BLUG)成立了,经过十多年的发展壮大,已经成为中国推广自由软件的先锋力 量。2015年,《自由软件,自由社会》第三版发布。到同年冬天,BLUG成 员中已经有很大一部分成为了自由软件基金会(FSF)和电子前哨基金会 (EFF)成员。2016年春,北京GNU/ Linux用户组正式成为中国第一个被GNU工程认可的GNU用户组( GNU USer Group)1 成为GNU用户组,意味着GNU和自由软件基金会认可了北京GNU/ Linux用户组,十多年来在推广自由软件哲学和技术上的贡献。同时更是种督促,督促我们需要为推广自由软件做更多贡献。所以您手上这本书, 就是我们为GNU工程和自由软件做出的新的贡献 翻译这本书的想法,来源于人民邮电出版社2015年出版的邓楠、李凡希翻译的理査德·斯托曼传记《若为自由故:自由软件之父理査德·斯托曼传》。看到此书出版,让我们意识到仅有他个人的传记是远远不够的,1相关信息可见https://savannah.gnu.org/projects/blug ==========第3页========== 传记只能让大家理解和懂得理査德·斯托曼的人生经历,却完全不足以理解他对自由软件哲学的思考和阐述,因此我们决定将他对自由软件的阐述和哲学思想的选集——《自由软件,自由社会》一书翻译出来,以自由文档许可证公开对外发布 自由软件来到中国,已经有二十多年的历史,从1998年引入GNU/ Linux到现在很多公司基于 GNU/Linux开发的所谓“国产操作系统”,虽然走过了二十多年的道路,但我们开发了多少真正尊重用户的软件?最近几年,国家大力推进“自主可控”的信息产业建设,虽然涌现出了很多优秀的国产“开源”软件,然而这些软件是真正尊重用户“自主可控”权力的吗?这些让我们深深意识到,只有社会中每一个人都能对运行在自已计算机(当然也包括智能手机、智能穿戴设备等)上的软件“自主可控”,整个国家的信息产业才能真正实现“自主可控”,毕竟这个国家是由每个如你我这样的普通公民组成的 翻译《自由软件,自由社会》一书,也希望可以团结国内自由开源软件社区和高校社团,启发所有参与者找回初心,合力推动自由软件在中国落地生根,推动中国的自由软件开发更合规,融入世界潮流。 选择翻译此书第三版,有很多考量。除了因为第三版是2015年发行的最新版,更是因为此版本有至少三分之一都是新文章,特别是理查德斯托曼最近几年在《纽约时报》和《连线》杂志上发表的重要文章,反映了最新的技术革新和社会变化:比如《如今自由软件更加重要》(p.32文则提到了随着移动互联网、所谓“云计算”技术的发展,新时代自由软件的重要性比之前更加重要;又如《自由硬件和自由硬件设计》(.53)一文就覆盖了近年来热门的“创客”运动和自由硬件开发;还比如《民主可以承受多少监控?》(p.323)一文就反映了自2013年NSA前雇员爱德华·斯诺登披露美国大规模监控丑闻以来,自由软件社区在“大数据”时代需要面对的机遇和挑战。第三版中有大量篇幅阐述软件专利和版权的内容,而这些内容是前两版较少涉及的部分,更是中国的自由软件(也包括开源软件)用户和开发者很少关注和理解的,我们认为将这一部分翻译出来,会极大推动国产自由软件的合规化。 ==========第4页========== 此书的翻译,本着尊重原文,力求精品的原则。很多人认为理查德斯托曼的观点偏激,甚至是极端的,我们翻译时在理解他论点的前提下,只直译了原文的文本,除非必要很少意译,以防曲解甚至误解作者原意,力求传达出理査德·斯托曼阐述自由软件哲学原始的本真的意思。这样也给读者留下自行判断的空间:斯托曼的观点是不是偏激极端。为了帮助读者理解,翻译时我们还加入了必要的“译者注”,以降低阅读门槛。 本书的翻译参考了既有的一些中文译版,特别感谢GNU网站中文化 团队以及“哲思社区”曾翻译过此书的第一版和第二版的部分文章,他们高质量的翻译为本书的翻译提供了很多参考。术语和专业性内容我们也参考了国内和港澳台专家撰写的相关论文、书籍,还有中文维基百科。同时为了减少重复劳动,以合规性为前提,我们也将几篇既有的优秀中文翻译(主要是许可证文本)加入其中,感谢他们曾做出的巨大贡献 参与本书翻译和校对的成员有(按贡献量排序): tonghuix、 nadebula、 Hagb、 myth、 Mandy my、 persmule、wxy、 biergaizi、 liushu、 Ice catx和artoria2e5。其中 nadebula提供了25篇高质量翻译,特别是翻译了大量版权和专利相关的文章,而这一部分则是此前很少发表的内容;其他成员则参与了翻译和校对;感谢 myth帮助解决了此书PDF及EPUB格式生成的问题; jiusuyu重新制作了“自由软件之歌”中文版乐谱,并可以通过自由的乐谱软件 Musescore播放聆听l;Hagb志愿帮助将此书新翻译的文章 向GNU官网反馈,并解决了多年未解决的交叉引用问题。 本书的翻译依然有不完善之处,我们非常欢迎各界朋友雅正。本书的翻译项目托管在htps:/github.com/beijing1ug/fsfs-zh,您可以直接在那里提交 Issue或 Pull request来帮助我们改正。此处亦附上此书英文原版下载地址https://www.gnu.org/doc/fsfs3-hardcover.pdf以便对照。 北京GNU/Linux用户组(https://beijinglug.club2019年4月于北京 1参见本书附录C的《自由软件之歌》(p.347) ==========第5页========== ==========第6页========== 第三版序言 Copyright C2015自由软件基金会。 给理查徳·斯托曼的情书,作者雅各·阿贝尔鲍姆( Jacob appellαum)我们生活在由机器构成的信息社会里。 软件和硬件对我们的信息时代和互联网一样重要。自由软件被称为是革命性的政治理论,就如同我们可以控制自已的生活,我们也应该能够控制那些延伸我们身体的机器。这个被自由软件基金会支持的理论,已经成为过去三十年来数万人的实践和传统。 自由软件作为一种政治理论承认了软件和硬件系统在我们社会中所扮演的角色。批判之前和现在的制度是必要的。我们也许会发现自己无法修改既存制度。我们成为了别人制造的那些不公道制度的牺牲品,而他们本身就是不公道的。而这些制度的产出并非总是显而易见,特别是当我们被迫接受这些制度安排,尤其是当它们已变成标准化和品牌标准的时候。自由软件并不仅仅只是批评:它可以成为提供自由的替代品,依赖于自由的标准,自由地为大众使用。 自由软件提供了一种转变的范例,我们可以自由的从前人那里理解并学习,自由地成长和分享,从错误中学习,从学习中受益,并分享这些益处给每一个人。当我们用 Copyleft的时候,我们能确保以后的用户都能从我们的作品中获得同样的自由。自由软件确保了我们的子孙后代也能解码数据的全部历史。这不仅确保了我们的自由权益,同样也包括他们的。 ==========第7页========== 在当今这个大规模监控的时代,自由软件通过它的可验证性机制带来了必须的透明性。自由软件让我们可以通过加密,来确保数据完整性、身份认证以及匿名我们自己。在一个不断深入私有化的世界里,我们发现自由软件给出了通向自由社会的一个公共支柱。我们无法列举自由软件的好处,因为我们无法道尽自由本身的好处。推广自由软件的事业是不会终了的,就如同为正乂的声索,并且需要时刻保持警惕。推广自由软件的事业是困难的,我们需要秉持排除万难的坚定意志来倡导和推动自由软件。投身于自由软件不仅仅是对于知识,同时也包括授权:授权学习,授权修改,授权分享,以及授权使之能够被分享。争取信息时代的自由需要拒绝在自由软件核心原则上妥协,并且要有牺牲精神。很多人可能拒绝这些负担,他们只想获得更多的财富;而其他人却在努力增加人类知识的深度和广度。通过实现自由软件,我们能发现一种面向长期愿景的可持续性发展模式,不仅增加了知识,同时切实可行地将这些知识自由地分享给所有人。这份崇高的事业以其无差别的关怀泽及我们每一个人;从现实到超现实,自由软件都被涉及。 理查德·斯托曼是一位革命家和理论家,他为这个世界推出了自由软件。而他撰写文章中涉及的论题,被信息时代和之后创立制度及系统的人们广泛阅读和诠释,已成为数十年来必读的经典。他一生致力于人性解放事业,同时这本书也介绍了如何为这项事业提供帮助 雅各·阿贝尔鲍姆1 JACOB APPELBAUM l雅各·阿贝尔鲍姆( Jacob appelbaum),美国独立记者,计算机安全研究员,艺术家和黑客( Hacker)。受雇于华盛顿大学,曾是Tor项目的核心开发者。译者注 ==========第8页========== 第一版序言 Copyright◎2002自由软件基金会 每一个时代都有引领时代发展的哲学家——也许是一个作家亦或一个艺术家。有时这些人家喻户晓,有些则是需要几代人的努力将其理念变为现实。无论是否为人熟知,一个时代会为这些抒发理想的人留下印记,他们或是盈盈细语于诗歌,或是揭竿而起于政治运动。 我们这个时代有一位哲学家。他不是艺术家,也不是专职作家。他是位程序员。理查德·斯托曼( Richard stallman)是MIT前程序员以及操作系统架构师。作为程序员和架构师,他创立了一项在这个日益由“代码”决定的世界里争取自由的运动,从此开始了他在大众生活舞台上的职业生涯 “代码”是一项使计算机运行的技术。无论是写在软件里或者烧在硬件上,都是由一系列指挥机器运行并写成文字的指令组成。这些机器——计算机日益定义并控制了我们的生活。它们决定了电话如何接通,电视上播什么节目;它们决定了视频是否能够通过视频流传到计算机上;它们也控制了计算机汇报给其制造商哪些信息。这些机器为我们服务,而代码控制这些机器 我们应该如何控制这些代码?怎么理解它们?启用控制时应该有什么自由与之匹配?有什么样的权力? 这些问题也挑战着斯托曼的生活。通过他及他的作品,让我们明白了代码“自由”的重要性。这里的fre并非表示写代码的人不能得到报偿,而 ==========第9页========== 是意味着程序员将代码透明给所有人,任何人都可以控制代码,并按照自己的需求修改。这就是“自由软件”;“自由软件”为这个由代码构成的世界做了回答 Free”,斯托曼在解释这个词的时候颇有怨言。然而这并没有什么可悲叹的,模糊的概念迫使人们去思考,“Free”这个词着实足够启发思考。对当代美国人而言,“自由软件”听起来像是乌托邦,完全无法实现的泂的,甚至连午餐,也是免费的。那些控制着世界上最重要机器的代码怎么能是“免费的”。一个理性的社会怎么能主张这样的理想? 但“free”一词的奇怪意思只是对我们而言,而不是这个词汇本身。Free词有很多意思,只有一个是表示免费。更多的则表示是自由。斯托曼说,把它称为“言论自由”,或者更准确地说是“自由劳动”较为恰当,并不是表示没有花费,而是表示没有被他人控制和限制 这种机制通过一种“ copyleft”模式的GPL许可证得以体现。基于copyleft条款赋予的权力,“自由软件”不仅仅是开放的,更保证了修改自由,且其他使用自由软件(技术上称为“派生”)的也必须是自由的。如果你使用了一个自由软件程序,并公开发布了修改版,那么修改版也和原版样是自由的。这是必须的,否则会违反版权法 “自由软件”与自由社会一样,也有其敌人。微软发起了针对GPL的 战争,警告所有人GPL是一种“危险的”许可证。事实上,它说的危险性 很大程度上是欺骗性的。还有反对者认为GPL“强迫”修改版也必须是自 由的。光看这一条不能判断是否强迫。微软拒绝允许用户发布修改过的 Ofce软件而不需要支付(假设)数百万的费用,如果这还不是强迫的话 那么GPL坚持的修改自自由软件的软件也必须是自由的,也不是强迫 有些人认为斯托曼的言论太过极端,然而并不极端。事实上,显而易见的,斯托曼的作品只是将代码出现之前世界的自由简单翻译过来了。“自由软件”能确保代码世界的秩序与之前的传统是一样“自由的”。 比如:一个“自由的社会”是由法律来规范的。然而任何自由社会的法律对这些都有限制:没有自由社会可以用秘密法律。在传统上没有政府可以对其治理的对象隐藏规范。法律能够起效,只在明显公平正义的情况下 ==========第10页========== 才可以。只有当法律的条款是可以被其监管的人或其管理的管理者(律师,立法机构)知悉和控制时,法律才是可见的。 法律的这种条件超出了立法者的工作。来想想美国法院的司法实践吧当事人雇用律师来提高利益,有时候这种利益通过诉讼得以提升。在诉讼过程中,律师写出诉讼状,这些诉讼状反过来影响法官写下的意见。这些意见决定谁能够在案件中获胜,或者某法律条文是否符合宪法的精神 这个过程中的所有材料都符合斯托曼所说的自由。诉讼简报是公开的,别人可以自由使用。论据是透明的(不等于说就是好的),论证过程也无需原律师的允许就可以拿走。法官意见可以在之后的诉讼摘要里引用,并可以复制或综合到别的诉讼简报或意见中。美国法律的“源代码”在设计上和原则上,对任何使用它的人都是开放和自由的。拿律师来说,借由重复使用之前案件的材料,律师发挥了创造力,可以作岀最佳的诉讼简报。原始资料是自由的,创新和经济都是在其上建立的 自由代码(这里指法律代码)的经济并没有扼杀律师。尽管任何人都可以使用和复制他们做成的东西,律师事务所仍然有足够动机来作出好的诉讼简报。律师也是手艺人,他或她的产品是公开的。但是这种工艺不是慈善行为。律师能得到收入,公众没有不给他们工作报酬。相反,这种经济能够蓬勃发展恰是因为之后的工作可以弥补前面的。 我们来设想一种不同的法律实践_—案情和证据都是保密的,判决只有结果而没有论证,法律只由警方把持而其他人看不到,法规条令也不经解释如何执行。 我们尽可以设想这样的社会,但却不能称其为“自由”。无论是否有更好的动机,或更有效率的分配,这样的社会都无法认为是自由的。自由社会中的自由生活理想并不仅仅只是高效的分配。而是在开放和透明的前提下建立法律的限制,不能因为对领导人有利就加入相应的选项。由软件代码治理的生活也不能比这个更差。 编写代码不是诉讼。它更好,更丰富也更有建设性。创造性和动机并不依赖于对创作产品的完全控制,法律就是一个明显的例子。类似爵士乐、小说或者建筑,法律条文是基于既有的基础而建立的。这种增补和改 ==========第11页========== 变一直是创新的体现。一个自由的社会必须保证其最重要的资源一直是自由的,这才像话。 这本书以一种使之更微妙且权力更明确的方式,收录了理查德·斯托曼的著作和演讲。这些文章跨度很大,从版权到自由软件运动的历史,包含了许多不为人知的论点,其中尤其是对数字世界中版权受到怀疑的变化的情况的深刻见解。这些文章是理解他思想的源泉,理解他的激情和他的正直,即使其他方面都不及此。这些文章将会启发那些接受他的理念并将之发扬光大的人们。 我并不十分了解斯托曼,但我很清楚他是一个严厉的人。他求胜心切,常常不耐烦。他对朋友可以像对敌人一样火冒三丈。他很强硬,不屈不挠,但却也很有耐心。 当我们的世界最终理解了代码的威力和危险,终于认识到代码和法律、政府一样,必须透明才能获得自由时,不妨回首看着这位强硬且不屈不挠的程序员,会发现他终身奋斗的景象终于实现:自由和知识可以在编译器下幸存。我们会认识到没有人能像斯托曼这样,可以为社会获得自由而奋斗和发声 然而我们尚没有获得自由。我们在捍卫自由的时候也许会失败。然而无论胜败,这些作品都展现了自由的景象。创作这些作品的生活中,会启发那些就像斯托曼一样,为自由而战的人们 劳伦斯·莱斯格1 LAWRENCE LESSIG 1劳伦斯·莱斯格( Lawrence lessig),是一位美国学者暨学术与政治的行动主义者,哈佛法学院法学教授。他还是知识共享( Creative commons)发起委员、软件自由法律中心(SFLC) 委员、阳光基金会咨询委员与电子前哨基金会(EFF)前任委员。—译者注 ==========第12页========== 前 此第三版《自由软件,自由社会》( Free Software, Free Society)将第 二版的很多文章更新了,并加入了很多新文章,其中三分之一都是新文章。与前几版一样,此书首先介绍了自由软件的原则和哲学。讲述了软件为何必须自由,并解释了我们的原则是如何指导实践活动的,以及解决了有关硬件自由设计的问题。 如何称呼和框定一个问题会影响我们对这个问题的思考。企业通过术语来推广他们的理念,接受了相应术语也就支持了他们。因此,在这版中,我们加入了新的文章来讲解FSF(自由软件基金会, Free software Foundation)是如何以及为什么这么称呼这些术语 版权”这一部分节录了讨论版权相关法律问题的演讲,并说明如何修改这些法律 专利”这一部分设想了一个解决计算机领域专利问题的方案。我将专利和版权分开讨论,是因为这两点是不能混淆在一起的 “许可证”这一部分大体并没有改变,依旧讲述了GNU的各个许可证, 还有 Brett smith讲述的各个许可证的历史变迁,并用一篇文章解释了为什 么软件项目必须升级到GNU通用公共许可证第三版 这一版继续阐述自由软件社区需要面对和解决的各种危险和陷阱,包括了当下的非自由游戏、电子书和持续威胁的电子监控 我希望此书可以告诉你,我们很容易就会失去自由,教会你如何保护,并启发你珍视自由。 ==========第13页========== 要感谢 Jeanne rasta管理此项目,编辑书目,排版文字,并建立目录还要感谢 Karl Berry协助解决 Texinfo技术问题,以及 Kyle winfree设计和排版此书的封面。 理查德·斯托曼 RICHARD STALLMAN ==========第14页========== 目录 译者序 第三版序 第一版序言 目录 GNU计划和自由软件 1.1什么是自由软件 12GNU工程 8 13GNU操作系统的初始公告 29 14如今自由软件更加重要 32 1.5为什么学校应该只使用自由软件 38 1.6政府推动自由软件的措施17为什么自由软件需要自由的文档 46 18售卖自由软件 49 19自由硬件和自由硬件设计 53 1.10应用自由软件判断准则 63 ==========第15页========== 2名字的含义 21名字的含义? 71 22 Linux和GNU操作系统 5 23自由与非自由软件的分类 80 24为什么说开源漏掉了自由软件的要点 90 2.5您说过“知识产权”吗?这是一种迷惑的幻景 99 26为何称之为诈骗( Swindle)? 104 27应避免使用(或慎用)的词语,由于它们是不公正的或者弓 起混淆的 107 3版权和不公 29 31阅读的权利 129 3.2对版权的错误解读—一系列错误 137 3.3科学必须摆脱版权束缚 151 34计算机网络时代的版权与社区之争 154 4软件专利:对程序员的威胁 75 4.1软件专利和文学专利 175 4.2软件专利的威胁 180 4.3保护软件领域免受专利困扰 202 5自由软件许可证 205 51许可证简介 205 52如何为你的作品选择一份许可证 211 53 X Window系统的陷阱 216 54程序不得限制它们的自由运行 219 55什么是 Copyleft? 222 56为什么使用 Copyleft 225 57 Copyleft:务实的理想主义 226 58GNU通用公共许可证 229 ==========第16页========== 59为何升级到GPLV3 244 5.10GNU宽通用许可证 248 5.11GNU自由文档许可证 252 5.12关于出售例外对 GNU GPL的影响 276 6陷阱和挑战 279 6.1您能够信任您的计算机吗? 279 62 JavaScript陷阱 286 6.3如果您在大学工作,请发布自由软件 292 6.4 GNU/Linux上带有数字限制管理(DRM)的非自由游戏:是 好是坏? 295 6.5电子书的威胁 297 6.6电子书必须增进我们的自由而非限制我们的自由 299 6.7服务器真正是在为谁服务? 302 7珍视社区和你的自由 311 7.1避免破坏性的妥协 311 7.2克服社会惯性 316 7.3自由还是权力 318 7.4缺陷并不等同于压迫 321 7.5民主可以承受多少监控? 323 附录A关于软件的基础知识 337 附录B不同语言对“自由软件”和“免费软件”的翻译 341 附录C自由软件之歌 347 ==========第17页========== ==========第18页========== 第1部分 GNU计划和自由软件 什么是自由软件? Copyright◎1996-2002,20042007,20092015自由软件基金会。此文最初于1996年发表在http://gnu.org 自由软件的定义 自由软件的定义给出了一个标准,即一个特定的软件是否有资格被称为自由软件。我们时不时修改这一定义,以澄清和解决与之相关的各种细微问题。关于我们对自由软件定义所作的修改记录,请参阅http://gnu.org/philosophy/free-sw.htm1“历史”部分。 “自由软件”( Free software)表示的是那些尊重用户和社区自由的软件。粗略的说,它赋予用户运行、复制、分发、学习、修改并改进软件的自由。因此,“自由软件”是有关用户的自由权益( liberty),而不是指免费(free)的价格。为了理解这个概念,你需要将“fre”一词理解成“言论 ==========第19页========== 2第1部分GNU计划和自由软件 自由”中的“自由”,而不是“免费啤酒”里的“免费”。有时我们会称之为 Libre software”,以避免带有免费的意思。 我们争取这些自由,是因为每个人都应该拥有它。有了这些自由,用户(包括个体和团体)就可以控制程序为己所用。当用户无法控制程序时,我们称这样的软件为“非自由”( Nonfree)或“专有”( Proprietary)程序。非自由的程序控制了用户,而开发者控制着程序:这就让程序成为了非正义权力的帮凶1。 如果一个软件的用户拥有以下四项基本自由,那么该软件可以被称为自由软件 基于任何目的,按你的意愿运行软件的自由(自由之零)。 学习软件如何工作的自由,按你的意愿修改软件以符合你的计算的自由(自由之一)。可访问源代码是此项自由的先决条件 分发软件副本的自由,因此你可以帮助他人(自由之二) 将你修改过的软件版本再分发给其他人的自由(自由之三)。这样可以让整个社区有机会共享你对软件的改动。可访问源代码是此项自由的先决条件。 如果一个软件可以充分授予用户所有这些自由,它就是自由软件,否则就是非自由软件。即使我们可以依据它们与这四项自由有多大的差异来区分不同的非自由发行方式,我们依然认为这些非自由软件是不符合伦理的。 在任何情况下,这些自由都必须应用于所有要使用的代码,或引导其 他人使用这些软件。例如,程序A会自动调用程序B来处理一些事情,如 果我们独立发布A也意味着用户还需要B,因此我们需要判断A和B是 否都是自由的。如果我们修改了A使得它不再需要B,那么只需要A是自 由的,就可以忽略B 1可参见《如今自由软件更加重要》(p.32)一文 ==========第20页========== 11什么是自由软件? 3 本文余下的内容,将会澄清关于特定自由是否适用的一些关键点再分发软件的自由(自由之二和自由之三)表示你可以在任何地方发布软件的副本给任何人,无论是否有过修改,无论是免费或收取费用。自由地再分发意味着(排除其他因素)你不需要必须事前征得仼何发行许可或为此支付额外费用。 你应该有修改软件的自由并将软件用于私人的工作或娱乐,甚至不需要提到你的修改。如果你发布了自己的修改版,你不应被要求通知特定的人或以特定的方式发布 运行软件的自由,即赋予任何个人或组织在任何计算机系统上,基于任何工作方式或任何目的运行软件,而无需与任何开发者或特定实体沟通的自由。在这个自由中,重要的只是用户的目的,而非开发者的目的;你作为用户有基于任何目的运行软件的自由;如果你将软件发布给了其他人,则他也有按自己目的运行软件的自由,但你不能将自己的目的强加给他。 以你的意愿运行软件的自由也表示你不能被要求禁止或停止运行该程序,这无关软件的功能,或对你来说它是否有用 再分发软件副本的自由,表示分发该程序的二进制或可执行格式时必须附带源代码,包括修改过的和未修改版(以可运行格式发布程序可以方便在自由的操作系统上安装)。对特定程序也可以不发布和产生二进制可执行格式(因为一些编程语言不支持这个特性),但你仍有发布这些格式,或开发一种方法来产生这些格式文件的自由。 为了实现自由之一和自由之三(修改软件并发布修改版的自由),你必须能够访问程序的源代码,因此有权力访问程序的源代码对自由软件来说是一个必要条件。而混淆过的“源代码”不能算真正的源代码1 自由之一允许用你修改的版本来替代原始的版本。如果一个程序从产品设计的角度发布只能用其他人修过的版本而不能用你的修改版——例如 1这里指的是“混淆代码”( Obfuscated code)的做法,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为 译者注,摘自维基百科 ==========第21页========== 4第1部分GNU计划和自由软件 所谓的“Tivo化”或“锁定”,或者(用行业内的话来说)“安全启动”( Secure Boot)—这样自由之一就被架空而无法实现,即便这些软件的二进制是从自由的源代码编译而来,也不能算是自由软件。 修改软件的一个重要方法是合并可用的自由子程序或模块。如果一个程序的许可证让你不能将一个合理授权发布的现有模块融合进来——例如要求你是你所添加进的代码的版权所有者,那么该许可证过于严苛以致不能被视为自由的 自由之三允许你以自由软件的方式发布修改版。一个自由许可证可允许以其他形式发布;也就是说,这不一定是 copyleft许可证。不过如果个许可证要求以非自由的方式发布修改版,则是非自由的 为了让这些自由得以实现,在你遵守许可的条件下,这些条款必须是永久且不可撤销的。在你遵守许可的情况下,如果软件的开发者有权力撤销,或者添加限制性条款,那么该软件就不是自由的 然而,一些对自由软件发布方式的限制规则是可以接受的,前提是与核心自由不冲突。例如, copyleft(最简单地说)规定你不能在分发程序的时候添加限制性条款以拒绝其他人的核心自由。这一规则与核心自由并不冲突,反而是在保护核心自由。 在GNU工程中,我们用 copyleft合法保护每个人的四项基本自由,我们相信使用 copyleft是非常重要的。然而非 copyleft的许可证也是合乎伦理的。有关“自由软件”、“ copyleft软件”和其他类型软件的话题可以参见本书《自由与非自由软件的分类》(p.80)一文 “自由软件”并不意味着“非商业”。一个自由软件允许商业使用,商业开发以及商业发布。自由软件的商业开发已经不是一件特殊的事情。这对自由软件是非常重要的,你可能需要为获取自由软件的副本而付费,也可能不需要付费。但是无论如何获得副本,你都有复制并修改软件的自由,甚至有重新销售的自由 1Tivo”是美国一大有线电视机顶盒产品,“Tivo化”( Tivoization)是指该产品包含了以 GPL许可证发布的软件,但实际上用户不能修改,因为一旦设备发现软件经过修改就会自动 关机。相关内容可参考本书《为何升级到GPLV3》(p.244)一文 ==========第22页========== 11什么是自由软件? 5 对程序的修改是不是改进程序,这只是一个主观判断。如果你对软件的修改权实际上仅限于作出被他人认作改进的修改,该程序并不自由。不过,规范修改版打包行为的条款是可以接受的,因为实质上这没有限制你发布修改版的自由,或者私下使用的自由。因此,许可证的一些条 款是可以接受的,比如要求你改变修改版的名字,移除徽标(LOGO),或 者修改版为你自己所有。只要这些要求不那么繁冗以至于影响了正常发布,都是可以接受的。既然你都已经做过一些修改,也就无所谓再多做一些了。 如果你的版本在这种方式下可用,也必须能够在另一种方式下可用”,类似这样的条款也是可以接受的。同样的,比如有规则要求如果你发布了修改版,也必须给前一个开发者发送一份,也是可以接受的(注意这样的条款仍然让你有自由选择是否公开发布的权力)。要求你为公开发布版的程序附带源代码,也是可以接受的 这里有个特殊问题,如果许可证要求你改变程序被其他程序调用时的名字。这样做实际上阻碍了你发布修改版以便在其被其它程序调用时取代原始版。这种情况仅当通过一种别名机制来标示原始程序名是修改版的别名时才可被接受。 有时政府的出口管制或者贸易制裁会影响你国际范围内发布软件的自由。软件的开发者没有权力消除或覆盖这些限制,但他们可以做的是拒绝强制要求使用程序时接受这些条件。这样,这些限制就不会影响到那些政府管辖以外的国家和人民的活动。因此自由软件许可证为了行使这些必要的自由,不能要求服从任何这些出口限制条款。 我们仅仅只是提及这些出口限制条款,而没有将这些条款作为软件许可证的条件,因为这样并没有限制用户,所以也是可以接受的。如果该出口限制条款对自由软件来说是非常普遍的,将其作为需要的条件也不是问题。然而这会产生一个潜在问题,出口限制法规若之后有一定修改,可能会让软件变成非自由的。 自由的许可证不能要求遵守非自由程序的许可证。所以,如果一个许可证要求你必须遵守“你使用的所有程序”的许可证,那么运行非自由程序的用户在这种情况下意味着需要遵守非自由程序的许可证,那么这将使 ==========第23页========== 6第1部分GNU计划和自由软件 得该许可证变成非自由的 自由软件许可证可以指定与软件相关的诉讼需要遵守哪个地区的法律,或需要在哪里提起诉讼。 大多数自由软件许可证是基于版权的,而何种要求能通过版权施加是有限制的。如果一个基于版权的许可证尊重如上文所述的自由,那么也就不会发生我们意料之外的问题(尽管这也许会发生)。然而有些自由软件许可证是基于合同的,而合同可以增加更大范围的限制。这样就有更大可能性使得该许可证出现无法接受的限制或非自由 我们无法将这些可能的情形一一列出。如果一个基于合同的许可证以不同于基于版权许可证的方式限制了用户,此处也没有表明其为合法,那么我们就需要考察这个许可证,并且很可能会将之视为非自由的。 在谈到自由软件的时候,尽量不要用“赠予”( Give Away)或“免费”( For free),因为这些词都是暗示价格上的免费而非自由的。一些常用语比如“盗版”也体现了一些我们希望你不会认同的意见。相关详情参见本书《应避免使用(或慎用)的词语,由于它们是不公正的或者引起混淆的》(p107)一文。我们同时还根据不同语言列出了“自由软件”( Free Software)词的翻译,请参见本书附录B(p.341)。 最后,这些有关自由软件的标准需要谨慎的解读。判断一个软件许可证是否是自由软件许可证,标准就是看它是否符合自由软件精神以及用语是否确切。如果一个许可证包含了不合理的限制,即便是此文中我们没有预料到的问题,我们也会拒绝它。有些时候一个许可证会带来新的问题和思考,这需要我们与律师咨询以后,共同思考和研判。我们最终得出结论以后,将会更新这份标准以使其能更容易体现特定的许可证是否符合标准 如果你对特定的许可证感兴趣,可以参考我们的许可证列表,位于htp://gnu.org/ licenses,/ license-1 ist. htm1。如果里面没有列出你所关心的,可以发邮件询问我们:1 incenSing@gnu.org。 如果你打算起草一份新的许可证,请首先通过上面这个邮箱联系自由软件基金会。不同的自由软件许可证意味着用户需要花费更多精力来理解; ==========第24页========== 11什么是自由软件? 7 我们也许可以帮你从现有的自由软件许可证里找到符合你需要的 如果这样依然不行,你真的需要一份新的许可证,有了我们的帮助也可以确保许可证符合自由软件标准并避免一些现实问题 软件之外 软件手册必须是自由的1,就如同软件必须是自由的一样,因为手册会对软件产生一部分影响 同理可证其他各种具有实用功能的作品,也就是说,任何体现知识可用性的作品也应该如此,比如教育资源和参考资料。维基百科( Wikipedia)就是最著名的例子 任何领域的作品都可以是自由的,对自由软件的定义已经扩展为了对自由文化的定义,可应用于任何领域的作品2。 开放源代码? 另一些用户使用“开放源代码”(“开源”, Open Source)一词来表示与“自由软件”相近(但不尽相同)的意思。我们倾向于使用“自由软件”词,因为一旦你理解它表示自由而不是价格,这么称呼可以表达自由。“开放”(Open)一词并不能表达自由之要义3。 1可参见《为什么自由软件需要自由的文档》(p.46)一文2可参见http://freedomdefined.org 3可参见《为什么说开源漏掉了自由软件的要点》(p.90)一文 ==========第25页========== 8第1部分GNU计划和自由软件 GNU工程 Copyright o 1998, 2001, 2002, 2005-2008, 2010 Richard Stallman 本文最初以标题“GNU操作系统和自由软件运动”发表于 由 Chris dibona等人编写的《开源软件文集:开源革命之声》( Sebastopol: O'Reilly media,199)1。尽管我不是“开放源码”的支持者,我还是贡献了这篇文章,这样自由软件运动的思想不会在那本书中完全失声 第一个软件分享社区 当我在1971年开始在MIT(麻省理工学院)的人工智能实验室工作 的时候,我成为了那里一个已存在数年之久的软件分享社区的一员。在我们这个特别的社区里,分享软件不受任何限制;这和计算机的历史一样悠久,正如分享菜谱的行为乃是和做饭的历史一样久远的。但我们分享得比大多数人更多 人工智能实验室使用一个叫IS(不兼容分时系统)的分时操作系 统,由实验室的黑客2员工们设计,并以 Digital PDP-10—当年的大型机 的汇编语言写成。作为这个社区和人工智能实验室系统黑客员工 的一员,我的工作便是改进这个系统。 阝时我们并不称我们的软件为“自由软件”,因为那个词尚不存在;但它们实际上就是。只要其他大学和公司的人想要移植和使用我们的程序,我们都十分欢迎。要是你看谁在用一个没见过而有趣的程序,你总可以提出要看看源代码,以便阅读,改动,或者吸收其部件以创造新的程序 1《开源软件文集:开源革命之声》一书中译本已由中国电力出版社于1999年12月出版,洪峰译。——译者注 2—一部分大众传媒混淆地将“黑客”一词用来表示“安全破坏者”。我们作为黑客拒绝认可这个含义,并继续用这个词表示“那些喜爱编程、享受有趣的才智,或两者兼备的人。”见拙作“ On hackingfhttp://stallman.org/articles/on-hacking.html ==========第26页========== 1.2GNU工程9 社区的解体 80年代初, Digital关停了PDP-10系列,与此同时,形势发生了剧变。 PDP-10在60年代优雅而强大的架构无法自然地扩展到80年代开始可用 的更大的地址空间上。这意味着几乎所有组成ITS的程序都要作废。 人工智能实验室的黑客社区不久前就解体了。在1981年,附属的 Symbolics公司几乎雇走了人工智能实验室的所有黑客,而严重减员使得社区已无法自持(由 Steve Levy撰写的《黑客》一书记述了这些事件,并给出了一幅社区全盛时期的清晰图景1)。人工智能实验室在1982年买了台新的PDP-10,而其管理员打算使用 Digital的非自由分时系统取代Is 阝时的新计算机,如ⅵAX或68020,都自带着操作系统,但没有一个 是自由软件:仅仅为了得到一份可以运行的副本,你就得签保密协议。这意味着使用计算机的第一步就是要你下保证不会去帮助他人。协作的社区被禁止了。私有软件所有者订立的规则是:如果和他人分亨,你就是海盗(在英语中也用该词表示“盗版者”——译者注)。想要改动,就来求我们吧。 说私有软件的社会制度—不许分享和改造软件的制度—是反社会的、是不道德的、是完全错误的,可能令不少读者吃惊。但是对于一个建立在分裂群众并保持用户无助的基础之上的制度,我们还能说些什么呢?对上述观点吃惊的读者可能已经将私有软件的社会制度视为理所当然,或用带有私有软件行业暗示的词语来判断。软件岀版商花了大量的力气和时间去使人们相信对这个问题只有一种看法。 当软件岀版商谈论“行使”他们的“权利”或“停止盗版”2时,他们实际“说”的是次要的。这些声明真正传达的是他们将未阐明的假设视为理所当然;公众被要求不加审视地接受这些。还是让我们来仔细审视一番吧其中一个假设就是,软件公司对拥有软件有着毋庸置疑的自然权利并 1《黑客:计算杋革命的英雄》一书已由机械工业岀版社于2011年岀版,赵俐、刁海鹏、田俊静译 译者注 2参见《应避免使用(或慎用)的词语》一文的“盗版( Piracy)”一节(p.121)查看“盗版”词的更多错误用法 ==========第27页========== 10第1部分GNU计划和自由软件 因此有权置身所有用户之上。(如果这真是一个自然权利,那么无论它对公众有多大害处,我们也不能反对。)有趣的是,美国宪法和法律惯例排斥这种观点:版权不是自然权利,而是一个政府强加的、限制用户自然地复制权的人为垄断 另一个未阐明的假设是,对软件唯一重要的是它能让你做什么工作—我们计算机用户不应关心我们应当拥有什么样的社会。 第三个假设是,如果我们不授予软件公司凌驾于程序的用户之上的权利,我们将没有软件可用(或者决不会有一个程序来做这个或那个特定的工作)。这个假设,在自由软件运动展示了我们能够制造丰富的有用的软件而不在上面拴任何锁链之前,也许看似是有理的。 如果我们拒绝接受这些假设,并基于普通常识下的道德把用户放在首位来判断这些问题,我们会得到非常不同的结论。计算机用户应当有自由去修改程序以适应他们的需求,并自由地共享软件,因为帮助别人是社会的根基。 篇幅所限,结论背后的展开叙述不在此详述,读者请参阅文章《为何软件不应有主》于htp://gnu.org/phi1 sophy/why- free. htm1,以及《如今自由软件更加重要》(p.32)。 严酷的道德抉择 没了社区,继续像从前那样是不可能了。与此相反,我面临着一个严酷的道德抉择 最简单的选择是加入私有软件世界,签署保密协议并下保证不去帮助黑客同仁。很可能我也会开发在保密协议下分发的软件,因而压迫他人并迫使他们也去背叛他们的伙伴。这样我可以挣钱并在写代码时乐在其中。但我知道当我在事业的尽头,回望筑墙分化人们的岁月时,我将发现我竞耗费了生命以使这个世界变得更糟。 当有人拒绝把我们的打印机控制程序(该程序缺少部分特性使得打印 机极其难用)的源代码交给我和MIT人工智能实验室时,我已经尝过了当 保密协议接受端的滋味。所以我无法对自己说保密协议是无辜的。当他拒 ==========第28页========== 12GNU工程11 绝和我们分享代码时我很生气,已所不欲,毋施于人 另一个选择是离开计算机领域,直截了当但令人不快。这样我的技艺不会被滥用,但它们会荒废。我将不会因分化限制计算机用户而被指责,但这种事仍然会发生 可能有什么项目或程序可以由我来写,以再重新成立一个社区?,有 所以我求索一条路线让程序员可以做一些好事。我扪心自问,有没有 答案很清晰:我们首先需要的是一个操作系统。它是开始使用一台计算机的至关重要的软件。有了操作系统你可以做很多事;没有操作系统你就完全无法使用计算机。有了自由的操作系统,我们就可以再次拥有互助的黑客社区—并邀请任何人加入。而且任何人都能使用计算机而毋须图谋去剥夺他们的朋友 作为一个操作系统开发者,我拥有适当的技艺。故我觉上天降此大任于我,纵不觉注定成功。我决定将系统做成和Unⅸx兼容以使其可移植,而且这样Unx用户可以很容易切换到它。追随黑客传统,我选了GNU这个名字,即“GNU’ s Not unix”(意为“GNU不是Unix”)的递归缩写。 个操作系统并不意味着仅仅是一个内核,这样仅仅足够来运行其他程序。在20世纪70年代,能称得上操作系统的软件都包含了命令处理器汇编器、编译器、解释器、调试器、文本编辑器、邮件程序,以及其它许多程序。ⅣS、 Multics、ⅤMS和Unⅸx都有这些。GNU操作系统也得有。后来我听到希勒尔的这些话1 我不为我谁为我?我只为我我为何?此时不作更待何时? 启动GNU工程的决定正是基于类似的情怀。 Free是“ freedom”的“free free software”一语常常引发误解——它无关价格、它关乎自由。以下是自由软件的定义 个软件对你,一个特定用户而言是自由软件,当 1作为无神论者,我不追随任何宗教领袖,但我有时发现我钦佩他们说过的一些话 ==========第29页========== 12第1部分GNU计划和自由软件 不论目的为何,有使用该软件的自由。 ·有修改软件以符合自身需求的自由。(为使得该自由有效行使,你必须能够访问源代码,因为在没有源代码的情况下修改程序非常困难。)有重新分发该软件副本的自由,既可免费亦可收费。 有发行该软件的修改版的自由,这样社区将从你的改进中受益。 因为“free”指的是自由,而不是价格,所以在销售副本和自由软件之 间没有矛盾。事实上,销售副本的自由是很重要的:以 CD-ROM形式卖出 的自由软件集对社区很重要,并且出售它们是为自由软件开发筹集资金的重要方法。因此,无法给予人们这些自由的程序就不是自由软件 因为"“fre”一词的二义性,人们用了很长时间找寻替代词,但更好的词汇尚未找到。英语比其它语言有更多的单词和词汇间的微妙差别,但它缺少一个简单而明确的单词用来表示“自由”,就像在“ freedom”一词中——最接近此含义的单词是“ unfettered”。诸如" liberated”," freedon”和open”等替代都有错误的含义或一些其它缺点。 GNU软件和GNU系统 开发一个系统是个非常大的工程。为了达成目标,我决定尽可能适配 并使用现有的自由软件。例如,一开始我就决定用TX来做主要的文本排 版器;若干年后,我决定使用Ⅹ窗口系统而不是为GNU再写一个窗口系 统 由于上述决定,和其他类似的决定,GNU系统不同于所有GNU软件 的集合。GNU系统包含非GNU的软件,这些程序是由其他人或项目为了 他们自己的目的而开发的。我们之所以能用它们是因为它们是自由软件 工程启动 我在1984年1月辞去了MIT的工作而开始编写GNU软件。离开MIT 是必要的,这样MT就无法干涉我将GNU作为自由软件发行。如果我还 在职,MIT可能会要求拥有这些作品,并强加他们自己的发行条款,甚至 12 ==========第30页========== 12GNU工程13 将它们变成一个私有软件包。我不希望做大量工作却只是看到它背离其初衷:创建一个新的软件分享社区。 尽管如此, Winston教授,后来的MIT人工智能实验室的领导,友善地邀请我继续使用实验室的设施。 第一步 GNU工程开始前不久,我听说了自由大学编译器工具包,又称VUCK (荷兰语的“自由”一词以ⅴ开头)。该编译器设计成支持多种编程语言,包括C和 Pascal,并支持多种目标机器,我曾写信给其作者询问GNU是否可以使用它 他带着嘲弄回答了,说大学是自由的而编译器不是。因此我决定首先 为GNU工程而写的程序就是一个支持多种语言,多平台的编译器 我希望能避免只靠自己编写整个编译器,因此我要来了 Lawrence Livermore实验室开发的多平台编译器 Pastel的源码。它支持一种适合系统编程的 Pascal语言的扩充版本,并由该语言写成。我给它加上了一个C语言前端,并开始将其移植到 Motorola68000计算机。但当我发现该编译器需要数兆字节的栈空间,而可用的68000Unⅸx系统仅允许64k时,我只得放弃 随后我了解到 Pastel编译器的工作方式是分析整个输入文件得到一个语法树,将整个语法树转化为一条“指令”链,再产生整个输出文件,整个过程不释放任何内存空间。到此为止,我总结我只得从头开始写一个新的编译器。那个新编译器现在叫GCC:其中没有一点 Pastel编译器的内容, 不过我仍努力把我之前写的C前端适配上去并用上。但那是几年后的事 了:首先,我做出了 GNU Emacs GNU Emacs 我从1984年9月开始写 GNU Emacs,从1985年初它就开始可用了。这使得我开始可以使用Unx系统编辑文件;因为没有兴趣学用ⅵ或ed, 13 ==========第31页========== 14第1部分GNU计划和自由软件 在那之前我在其他类型的机器上编辑文件。 这时候,人们开始想用 GNU Emacs,因此出现了该如何发行它的问题。当然,我把它放在了我在MT时用的计算机的匿名ftp服务器上(那台计算机prep.ai.mit.edu,因而成了主要的GNU印tp发行站点,当它年后退役时,我将其域名转移到我们的新tp服务器上)。但在那时,不少感兴趣的人们并不在互联网上因而无法通过ftp得到副本。所以问题是我该跟他们说什么? 我可以说,“找个上网的朋友帮你下载一个”。或者我可以像对原来PDP-10 Emacs那样做:跟他们说,“寄一盘磁带和SASE(贴足邮资写明发信人)来,我会把 Emacs写到磁带上寄回去。”但我没有工作,而我正在寻找通过自由软件挣钱的方法。所以我宣布我会寄一盘磁带给任何想要的人,要价150美元。我以这种方式启动了发行自由软件的事业,那是今天发行整个 GNU/Linux系统的公司们的先驱。 是一个对任何用户都自由的程序吗? 如果一个程序离开作者的手时是自由软件,这并不一定意味着它对拥有其副本的每一个人都是自由软件。例如,公有领域的软件1(没有版权的软件)是自由软件;但任何人都可以制作由它修改而来的私有版本。类似的,不少自由程序是被版权保护但按照一个简单的、允许私有修改版的宽容性协议发行。 这个问题的典型例子是X窗口系统。这是一个由MIT开发并以一个 宽容性协议发行的自由软件,它很快被各个计算机公司接受。它们把X以 仅有二进制的形式加到它们的私有Unⅸx系统中,并被同样的保密协议控制着。这些Ⅹ的副本和Unix一样,已经不再是自由软件。 Ⅹ窗口系统的开发者们并不认为这是一个问题—他们期望并有意使其发生。他们的目标不是自由,而仅仅是“成功”,那种定义为“有许多用户”的成功。他们不在意这些用户是否拥有自由,只是希望他们人数众多。这导致一个矛盾的情形,两种不同的自由度计算方法对同一个问题1参见《自由与非自由软件的分类》中的更多公有领域软件的相关内容(p.82)。 ==========第32页========== 12GNU工程15 “这个程序自由吗?”给出不同的回答。如果你基于MIT许可证的发行条 款给出的自由作判断,你就会说Ⅹ是自由软件。但是如果你以一般Ⅹ用户的自由来衡量,你就只能说它是私有软件。大多数Ⅹ用户当时正在使用的是随UnX系统而来的私有版本,而不是自由版本。 左版( Copyleft)和 GNU GPL GNU的目标是给与用户自由,而不仅仅是流行。所以我们需要使用可 以阻止GNU软件被转变成私有软件的发行条款。我们使用的方法叫“左 版 左版使用版权法,但使它的作用与之通常的作用相反:它成为一种保持程序自由的手段,而不是限制程序的手段。 左版的核心思想是给与任何人运行程序、复制程序、改写程序,和发行改写后的程序的许可—但那些人无权添加自已的限制。这样一来,定义“自由软件”的关键自由藉由每个拥有副本的人得以保证,这些自由成了不可剥夺的权利 对于一个有效的左版,修改版也得是自由的。这确保了建立在我们的工作基础上的作品发布后将有用于社区。当以程序员为业者志愿改进 GNU软件时,左版能防止他们的雇主说:“你不能分享那些改进,因为我 「要用它们来做一个我们的私有版本。” 如果我们要确保程序的每个用户的自由,就需要做出修改保证必须的自由。那些私有化Ⅹ窗口系统的公司通常作了一些修改以将其移植到它们的系统和硬件。这些改动与Ⅹ的大规模扩展相比而言是较小的,但是它们并非微不足道。如果进行修改是拒绝用户自由的一个借口,任何人来利用这一借口都是非常容易的。 个有关的问题涉及将自由的程序和非自由的代码结合到一起。这样 1在1984或1985年, Don Hopkins(一位非常有想象力的朋友)寄给我一封信。在信封上他写下了不少有趣的话,包括这句:“ Copyleft-逆转一切权利。”我用“ copyleft”一词来命名我正在开发的发行理念。(本文采用了贾星克、李极光发表在云南师范大学学报的《论自由软件运动》一文中对 copyleft一词的译法,即“左版”。—译者注。) 15 ==========第33页========== 16第1部分GNU计划和自由软件 的结合体将不可避免变得不自由;任何一个在非自由部分上缺失的自由也将在整体上缺失。允许这样的结合将会打开足以沉掉一艘船的缺口:任何添加或结合到左版程序上的东西必须使得更大的结合版也是自由和左版的 我们明确为大多数GNU软件使用了左版的GNU通用公共许可证,或 简称 GNU GPL。我们在特定场合下有其它种类的左版可以使用。GNU手 册也是左版的,但使用一个非常简化的左版类型,因为 GNU GPL的复杂 性对手册是不需要的1。 自由软件基金会 随着使用 Emacs的兴趣的增长,开始有其他人加入GNU工程,我们感到再次筹集资金的时候到了。所以我们在1985年建立了自由软件基金会(FSF),一个发展自由软件的免税慈善机构。FSF也接手了发行 Emacs 磁带的工作;后来通过将其他自由软件(既有GNU的也有非GNU的)加 到磁带上,和卖软件的自由手册扩展了该业务。 FSF的大部分收入曾经来自销售自由软件的副本和其他相关服务(源 代码的CD-ROM、二进制文件的CD-ROM、精心印刷的手册,都有着再发 行和修改的自由),以及豪华的发行版(我们为客户选择的平台定制的完 整的软件集)。今天FSF仍然销售手册和其他部件2,但大部分的资金来自 成员的会费。你可以通过htp://fsf.org/jin来加入FSF 自由软件基金会的雇员已经编写并维护了大量的GNU软件包。两个 值得注意的是C库和 shell gnu c库是运行于 GNU/Linux系统上的任程序用于和 Linux通信的组件,由自由软件基金会的成员之一, Roland McGrath所开发。用于大部分 GNU/Linux系统的 shell是BASH,“ Bourne Again Shel”3,由FSF雇员 Brian fox编写。 1我们现在对文档使用GNU自由文档许可证。 2于我们的在线商店中可见,位于http://shop.fsf.org 3“ Bourne again Shel”是对“ Bourne shell,Unix上普遍使用的 shell玩的文字游戏。( Bourne与表示出生的born谐音—译者注) ==========第34页========== 12GNU工程17 我们资助了这些程序的开发是因为GNU工程并不仅仅与工具和开发 环境有关。我们的目标是一个完整的操作系统,而该目标需要这些程序。 支持自由软件 自由软件的哲学抵制一种特定的分布极广的商业实践,但它不反对商业。当商业尊重用户的自由时,我们祝愿它们成功 销售 Emacs的副本展现了一种自由软件的生意。当FSF接手了这项生意之后,我需要另一种方法谋生。我在销售与我所开发的自由软件相关的服务中找到了它。它包括教人们诸如对 GNU Emacs编程,定制GCC,和 主要是移植GCC到新平台的软件开发的课题 今天,每个此类的自由软件生意被许多公司实践着。有的通过CD ROM发行自由软件集;其他的则销售服务,在从回答用户问题,到改正程 序错误,以至增加大的新功能等不同层次上。我们甚至开始看到基于发起新的自由软件产品的自由软件公司。 值得特别注意的是,不少公司尽管将它们自己与“ open source”一词联系在一起,实际上它们的生意是基于与自由软件一起工作的非自由软件它们不是自由软件公司,它们是私有软件公司,其产品诱惑用户远离自由。它们称此为“增值包”,反映了它们希望我们接受的价值观念:便利在自由之上。如果我们更珍惜自由,我们应该称它们为“去自由的”包 技术目标 GNU的首要目标是作为自由软件。即使GNU对Unx没有技术优势,它也有允许用户合作的社会优势;它还有道德优势:尊重用户的自由。但是将已知好的实践检验过的标准应用到工作上是很自然的——例如,动态地分配数据结构以避免武断地固定大小限制,并在任何有意义之处处理所有可能的8位代码 另外,我们放弃了面向小内存的Unix设计,决定不支持16位机器 (显然32位机器在GNU系统完成时将成为主流),并且不为了减少内存使 ==========第35页========== 18第1部分GNU计划和自由软件 用而作任何努力,除非超过了一兆字节。在处理非常大但不是至关紧要的文件的程序中,我们鼓励程序员们将整个文件读入内存,然后扫描其内容而不必顾虑输入输出的问题。 这些决定使得不少GNU程序在可靠性和速度上超越了在Unix上的对应的程序。 捐来的计算机 当GNU工程声名鹊起,人们开始给该工程捐赠运行Uπix的计算机。这非常有用,因为开发GNU组件最轻松的方法就是在一个Unx系统上做,然后一个一个地替换掉Unx系统上的组件。但这引发了一个道德问题:我们拥有Unx的副本从根本上说是不是正当的。 Uniⅸx以前是(并且现在还是)私有软件,而GNU工程的哲学说我们不该用私有软件。然而,应用那些与推论出“自卫的暴力是正当的”相同的理由,我的结论是:在开发用于帮助他人停用私有软件包的自由软件代替品的关键时刻,使用私有软件包是合理的 但是,尽管这是一个可以合理化的罪恶,它仍然是罪恶。今天我们已经不再持有任何Unx的副本,因为我们已经用自由的操作系统取代了它们。如果我们不能将一台计算机的操作系统换成自由的,我们就把整台计算机都换掉。 GNU任务清单 随着GNU工程的进行,以及越来越多的系统组件被找到或开发,最 终使得整理一份未完成工作的清单变得很有用。我们用它来招募开发者来编写缺失的部分。它被称为GNU任务清单。除了尚未完工的Unix组件外,我们列出了额外的各种各样的其它有用的软件和文档项目,我们认为,这些是一个真正完整的系统所应当拥有的。 ==========第36页========== 12GNU工程19 如今1,留在GNU任务清单中的Unⅸx组件除了一些无关紧要的之外已经几乎没有了—它们都已经被完成了。但清单中充满了可以被称为“应用程序”的项目。将任何不止能吸引一小部分用户的程序加到操作系统中都是有益的。 就连游戏都在任务清单里——而且从一开始就有。Unⅸx包含游戏,所 以GNU自然也该包含。但兼容性对游戏来说不是问题,所以我们没有跟 着Uniⅸx已有的游戏列表走。作为代替,我们列出了用户可能会喜欢的系列不同种类的游戏。 GNU库GPL GNUC库使用一种特别的左版,称作GNU库GPL(LGPL)2,允许 将私有软件链接到该库上。为什么需要这样的特例? 这不是个原则问题:没有哪个原则说私有软件产品有资格包含我们的 代码。(为什么要为一个严辞拒绝与我们分享的工程作贡献呢?)为C库, 或任何库使用LGPL,是个策略问题。 C库做的是通用的工作:每个私有系统或编译器都附带C库。因此, 让我们的C库只能为自由软件所用不会为自由软件带来任何优势—这只 会吓阻人们使用我们的库。 有一个系统是这个的例外:在GNU系统(包括 GNU/Linux)中,GNU C库是唯一的C库。所以GNUC库的发行许可决定了是否可以为GNU系 统编译私有程序。没有道德理由允许私有应用在GNU系统中运行,但从 战略上来看禁止它们会更多地吓阻人们使用GNU系统,而不是鼓励开发 自由应用。所以使用库GPL对C库是个好策略 对于其他的库,策略性的决定需要具体问题具体分析。当一个库倣的1写于1998年。2009年我们不再维护长任务列表。社区的自由软件开发得很快,我们没法全部追踪到。取而代之,我们有一个高优先级项目的列表——一个更短的列表,列举了我们 十分想要鼓励人们去写的项目 2这个许可证现在叫 GNU Lesser General Public license(GNU宽通用公共许可证),以免给 出所有库都该使用它的印象。更多信息见《为什么你不应该在下一个函数库中使用宽GPL》 fhttp://www.gnu.org/philosophy/why-not-lgpl.html 19 ==========第37页========== 20第1部分GNU计划和自由软件 是一种能帮助编写特定种类程序的特殊工作时,那么将其用GPL发行,限 制其只能被用于自由软件,是一种帮助其它自由软件开发者的方法。这给了他们面对私有软件的一个优势。 想一下 GNU Readline,一个被开发用来为BASH提供命令行编辑功能的库。 Readline是用普通的 GNU GPL而不是库GPL发行的。这可能确实减少了 Readline的使用量,但这对我们没有损失。与此同时,至少有一个可用的应用特地为了能够使用 Readline而变成了自由软件,那是社区真正的收获 私有软件有金钱提供的优势;自由软件开发者则要相互取得优势。我 希望有朝一日我们能拥有大量受GPL保护的、没有可用的私有替代的库, 提供作为新自由软件的砖石的有用模块,并为进一步的自由软件开发添加巨大的优势。 搔到痒处? Eric raymond说“每一个优秀的软件作品都从搔到开发者个人的痒处(意为解决开发者个人的问题——译者注)开始2。”也许有时是这样。但 不少GNU软件的关键部分是为了一个完整的自由操作系统而开发的。它 们来自愿景和计划,而不是冲动。 例如,我们开发了GNUC库因为类Unx系统需要一个C库,开发了BASH因为类Unx系统需要一个she,还有 GNu tar因为类Unx系统需要一个tar程序。我们自己的程序也同样如此—GNUC编译器,GNU Emacs,GDB和 GNU Make。 有些GNU程序是为应对我们的自由的特定威胁而开发的。为此,我 们开发了gzi来取代因LZW专利而从社区流失的 Compress程序。我们发现有人开发 LessTif,后来我们还开始了 GNOME和 Harmony,来解决因某 些私有软件库(见下文)所带来的问题。我们正在开发GNU隐私卫士(即 Eric raymond是开源的主要拥护者;参见《为什么说开源漏掉了自由软件的要点》(p.90)。2埃里克‘雷蒙德(Eric.S. Raymond),《大教堂与集市》;此书已由机械工业出版社于2014年出版,卫剑钒译 ==========第38页========== 12GNU工程21 GnuPg简称GPG。基于 OpenPGP协议实现的自由的用于加密、数字签名及产生非对称密钥对的软件。—译者注)来取代流行的非自由加密软件,因为用户不应该在隐私和自由之间作出选择。 当然,写这些程序的人们变得对这项工作感兴趣,许多人为了自己的兴趣和需要给它们添加了很多功能。但那并不是这些程序存在的原因 出乎意料的发展 在GNU工程刚刚开始的时候,我觉得我们将开发整个GNU系统,然 后整个发行。而这并没有发生。 因为GNU系统的每一个组件都是在Unx系统中实现的,每个组件早在一个完整的GNU出现以前就都可以在Unix系统中运行。这些程序有的变得流行,而用户们开始扩充并移植它们—到各种互不兼容的Unix版本上,有时也会移植到其他系统 这个过程使得这些程序更加强大,且为GNU工程引来了资金和贡献 者。但或许也使得一个最小可用系统延迟了数年,因为GNU的开发者们 把时间投入到维护这些移植版和为已有组件增加特性,而不是去编写一个个缺失的组件上 GNU Hurd 到了1990年,GNU系统几乎已完成了:唯一主要的缺失部分是内核。 我们已经决定将我们的内核实现为一组运行在Mach上的服务进程。Mach是一个由卡内基梅隆大学,而后在犹他大学开发的微内核; GNU Hurd是运行于Mach之上一组服务(正如一群牛羚—GNU)(Hurd与herd谐音,而herd有“群”的意思—译者注),负责Unix内核的各种任务。开发的启动有所延误,因为我们要等Mach像它承诺的那样作为自由软件发行。选择这种设计的一个原因是为了避免此工作中看起来似乎是最困难的部分:在没有一个源码层调试器的条件下调试内核程序。这部分工作在 Mach中已被完成,因此我们期待能将Hurd服务作为用户程序来调试,用 21 ==========第39页========== 22第1部分GNU计划和自由软件 GDB。但这花了很长时间才做到,而互相发消息的多线程服务群实际上非 常难以调试。这使得让Hurd能够稳定工作的进程延长了很多年。 Alix GNU的内核原本并未打算叫Hud。它原本的名字是Al—以我当时的恋人命名。她,作为一个Unix系统管理员,指出她的名字是多么符合 UnⅸX系统版本的一般命名模式;作为玩笑,她跟朋友说:“有人一定得用我的名字给一个内核起名。”我什么都没说,但打算用一个叫Alix的内核让她吃一惊。 事情并没有保持不变。 Michael(现在叫 Thomas) Bushnell,内核的主要开发者,钟意Hurd这个名字,并重新定义了Alix来表示内核的某个特定部分——用于捕获系统调用并向Hurd服务器发消息以处理的那个部分。后来,Alix和我分手了,她还改了名字;与此独立地,Hurd的设计改变了,以至于C库直接向服务器发消息,而这使得那个Alix组件从设计中消失了。 但在这些事情发生以前,她的一个朋友在Hurd的源码中偶然见到了AIⅸx这个名字,并告诉了她。所以她确实有机会发现有一个内核以她命名。 Linux和 GNU/LinuX GNU Hurd尚不适合用于生产,我们也不知道它还能不能适合。这个基于能力的设计有着直接来源于设计灵活性的问题,而且不知道有没有解决方案。 幸运的是,有另一个内核可用。在1991年, Linus torvalds开发了个Umⅸx兼容的内核并称之为 Linux。它一开始是私有的,但在1992年,他使其成为自由软件;整合 Linux和尚不完整的GNU得到了一个完全自由的操作系统(当然,整合工作自身也很重要)。正是因为 Linux,我们今天 终于能运行GNU系统的一个版本。 我们称这个版本的系统为 GNU/Linux,以表达他是由GNU系统和作 ==========第40页========== 12GNU工程23 为内核的 Linux整合而成的。不要实用主义地称整个系统为“ Linux”,因为那将我们的工作归于他人。请同等程度地提及我们1。 未来的挑战 我们已经证实了我们开发多种类型的自由软件的能力。但这并不意味着我们是不可战胜、不可阻挡的。一些挑战使得自由软件的未来变得不确定;与它们会战将需要坚实的努力和耐力,有时要奋战数年。这将会需要那种当人们珍惜他们的自由,并且不让任何人将其夺走时所显示的决心。下边四个段落将讨论这些挑战。 机密硬件 硬件厂商愈发倾向于对硬件规格保密。这使得编写让Liux和Xre86能支持新硬件的自由驱动程序变得很难。现在我们有了完整的自由操作系统,但是如果不能支持明天的计算机,我们将会在明天失去它们。 有两种方法来应付这个问题。程序员可以采取逆向工程的手段来了解如何支持这些硬件。其他的人则可以选用被自由软件支持的硬件;随着我们的人数增加,规格保密将成为一个自取灭亡的策略。 逆向工程是件大工作;我们会有程序员具备足够的决心去担负这件工作吗?是的——如果我们已经建立了认为自由软件是个原则问题,而私有驱动程序不可容忍的坚定信念。我们中的大多数人会额外花钱,或甚至额外花时间,从而我们可以使用自由驱动程序吗?是的,如果拥抱自由的决心被广泛传播 2008脚注:这个问题同样延伸到BIOS.有一个自由的BIOS,Lbre Boot2( coreboot的一个发行版);这个问题对计算机变得重要起来,因为 Libreboot可以不用非自由的“Blob”就能支持它们。] 1更多信息见"GNU/LinuxFAQ于http://gnu.org/gnu/gnu-linux-faq.htm1和《 Linux和GNU操作系统》(p.75)2参见http://libreboot.org 23 ==========第41页========== 24第1部分GNU计划和自由软件 不自由的库 运行于自由操作系统上的非自由库表现得就像针对自由软件开发者的陷阱一般。库的诱人特性是诱饵;如果你用了这个库,你就掉进了陷阱,因为你的程序无法有用地成为自由操作系统的一部分(严格来说,我们可以包含你的程序,但没有了该库它就无法运行)。更糟糕的是,如果一个使用私有库的程序流行起来,它可引诱其他没有怀疑的程序员们落入陷阱这样的程序的第一个实例是80年代的Moif工具箱,尽管那时还没有自由操作系统,但是很显然 Motif以后会对自由操作系统引发什么问 题。GNU工程通过两种方式回应这个问题:通过请求个别的自由软件工 程在支持 Motif的同时也支持自由的Ⅹ部件工具箱,并请求一些人编写替代Moif的自由软件。该工作花费许多年时间;由匈牙利程序员们开发的 LessTif,在1997年才变得足够强而得以支持大多数 Motif应用程序在1996到1998年间,另一个不自由的GUI工具箱库,叫Qt,被用在 KDE桌面这一包含大量自由软件的集合中。 自由的 GNU/Linux系统不能使用KDE,因为我们不能使用那个库。但是一些不严格坚持自由软件的GNU/ Linux系统商业发行者将KDE加入到 它们的系统中—而产生了有更强能力,和更少自由的系统。KDE小组积 极地鼓励更多的程序员们使用Qt,成百万的新“ Linux用户”从来都不知道有这样一个问题的存在。情形相当糟糕 自由软件社区以两种方法应对这个问题: GNOME和 HarmonyGNOME, GNU Network Object Model Environment(译为“GNU网络 对象模型环境”,现在已经不再用这个说法—译者注),是GNU的桌面项 目。从1997年开始,由 Miguel de icaza在红帽软件的支持下开发, GNOME开始提供类似的桌面工具,但排它地只使用自由软件。它也有技术上的优 势,如支持多种语言,而不仅仅是C++。但是它的主要目的是自由:不需 要使用任何非自由软件 Harmony是一个兼容的替代库,设计为使得无需t运行KDE软件成为可能。 在1998年11月,Qt的开发者声明改动许可证,当其实施后,应该会 ==========第42页========== 12GNU工程25 使得〔t成为自由软件。虽然没办法确信,但是我想这应该部分归功于社区对αt是非自由软件时所造成的问题的坚定回应(新的许可证既不方便也不公正,所以仍旧值得去避免使用Qt) [后记:2000年9月,Qt按 GNU GPL发行,实际解决了这个问题我们将如何应对下一个诱人的非自由库呢?整个社区会明白要远离陷阱吗?或者我们中的许多人将为了方便而放弃自由,从而产生一个大问题?我们的未来将取决于我们自身的哲学。 软件专利 我们面对的最恶劣的威胁来自软件专利,它可以对自由软件加上算法 和功能的限制多达二十年。LZW压缩算法的专利申请于1983年,而我们 仍然无法发行能够生成适当压缩过的GIF的自由软件。[直到2009年这些 专利才过期。]1998年,由于专利诉讼威胁,一个用于生成MP3压缩音频 的自由程序被迫从发行版中移除 仍有办法对付专利:我们可以寻找证据以证明一个专利是无效的,也可以寻找替代方法来完成工作。但是这每一种方法只是偶尔才起作用;当它们都失败时,一个专利可能会迫使所有的自由软件都缺少某些用户想要的功能。当这种事发生时我们可以做些什么呢? 我们中因自由而重视自由软件的人们无论如何都将与自由软件共进退。我们将设法不用专利保护的功能而完成工作。但是那些认为自由软件技术出众而重视它的人们,有可能在专利抑制自由软件时认为这是自由软件的失败。因而,虽然讨论软件开发的“市集”模式的实用效力和一些自由软件的可靠性和能力是有用的,但我们决不能止步于此。我们必须探讨自由和原则。 自由文档 我们自由操作系统的最大不足不是在软件中—而是缺乏可以包含在我们系统中的优秀自由手册。文档资料是任何软件包的要害部分;当一个重要的自由软件包没有与优秀的自由手册一起出现,那就是一个重大缺 25 ==========第43页========== 26第1部分GNU计划和自由软件 陷。今天我们有许多这样的缺陷 自由文档,像自由软件一样,是自由问题,不是价格问题。自由手册的标准几乎与自由软件完全相同:它是为了给予所有用户某种自由。必须允许重新发布(包括商业销售),不论是在线还是书面形式,因而手册能够伴随每个程序的每个副本 改动的许可同样至关重要。作为一个普遍规律,我不相信人们有必要拥有修改所有种类文章和书籍的许可。例如,我不认为你或我应该感激被给予修改像本文这样描述我们行为和我们观点的文章的许可权。 但是有一个特殊的原因说明为什么修改自由软件文档资料的自由是要紧的。当人们行使他们修改软件的权利,并且增加或改变其功能时,如果他们是尽职的,则他们也会同时修改文档和资料——因而他们能随着修改过的程序一起提供正确和可用的文档资料。一个不允许程序员们尽职并完成该工作的手册不符合我们社区的要求。 关于修改应该如何完成的一些限制并不会造成问题。例如,保持原作者的版权声明,发行条款,或作者列表的要求是正当的。要求修改后的版本包括它们是修改版本的声明也是没有问题的,即使有整个章节不能删除或修改,只要这些章节处理的是非技术主题。这些类型的限制不是问题,因为它们不阻止尽职程序员修改手册以适应修改过的程序。换种说法,它们不妨碍自由软件社区完全利用该手册 然而,必须能够修改手册中的所有技术性内容,并将结果以所有常规介质,通过所有常规渠道分发;否则,这些限制将对社区造成阻碍,手册将变得不自由,而我们需要另一手册。 自由软件开发者们会有觉悟和决心去生产全系列的自由手册吗?再说次,我们的未来取决于哲学 我们必须谈论自由 估计当今有数千万的用户使用诸如 Debian gnu/ Linux和红帽“ Linux”这样的GNU兀iux系统。自由软件已经发展到了这样实用的优势,使得用户纯粹为了实用原因而聚集到它身边。 ==========第44页========== 12GNU工程27 这种现象的好结果是明显的:更多人有兴趣开发自由软件,更多用户参与到自由软件产业,以及更能鼓励公司开发商业自由软件而不是私有软件产品。 但是对软件的兴趣增长快于对其指导哲学的了解,这带来了一定麻烦。我们面对上述挑战和威胁的能力依赖于坚决主张自由的意志。为了确定我们的社区拥有这个意志,我们需要在新用户来到社区时向他们传播这样的思想。 但是我们正在这点上失败:吸引新用户加入社区的努力大大超越了教育他们成为我们社区的好公民的努力。我们需要做这两件事,而且我们也需要保持这两个努力的平衡。 开放源代码” 当1998年一部分社区决定停止使用术语“自由软件”并改为说“开源软件”时,教导新用户有关自由的观念变得更加困难 些喜欢该术语的人想要避免“自由”与“免费”的混淆—这个目标 是正当的。其他人却打算将激励了自由软件运动和GNU工程的原则精神 抛到一边,反而迎合行政和商业用户,而这些用户中的许多人持有一种将利润置于自由,社区和原则之上的意识形态。因而,“开源”的花言巧语集中在制作高质量,强有力软件的潜能上,但是避开自由,社区和原则的思想 《 Linux》杂志是一个清晰的例子——其中充满了利用GNU/ Linux运行私有软件的广告。当下一个Moif或Qt出现时,这些杂志将警告程序员们远离它还是为它登载广告呢? 商业支持能以许多方式为社区作贡献;其它种类的支持也都一样,它是有益的。但是为了赢得他们的支持而减少对自由和原则宣讲可能损失惨重;它使得前述“软件推广和公民意识教育”之间的失衡变得愈加糟糕。 自由软件”和“开放源码”或多或少地描述了同一个软件的类型,但 对软件本身和价值观的描述是不同的。GNU工程继续使用“自由软件”这 个术语,来表达自由是重要的思想,而不仅仅是技术 27 ==========第45页========== 28第1部分GNU计划和自由软件 尝试! 犹达大师的名言“没有尝试’”听似优雅,但对我不起作用。我已经完成了我的大部分工作,与此同时担心我能不能做,且不确定如果我做了,我的努力够不够完成目标。不过无论如何我尝试了,因为在敌人和我的城池之间除了我没有任何人。令我吃惊的是,我有时会成功。 有时我失败了;我的一些城池陷落了。随后我发现另一个受到威胁的城池,并为另一场战斗做好准备。天长日久,我学会了寻找威胁并将我置于城池和威胁之间,并召集其他黑客和我联合。 今天,我不是在单打独斗。当我看见一个团的黑客挖战壕坚守战线时的感觉是一种安慰和乐趣,我意识到,目前,这个城池也许能幸存。但是危险与年俱增,并且现在 Microsoft已经明确地将目标对准我们的社区。我们不能把自由的将来视为天命。别把它当作天命!如果你想要保持你的自由,你必须备战以保卫它。 ==========第46页========== 1.3GNU操作系统的初始公 29 GNU操作系统的初始公告 这是GNU工程的原始通告,由理查德·斯托曼( Richard stallman)于1983年9月27日发表 纵观历史,可以发现GNU工程在很多地方都与这份初始通告有很多 差异。比如实际是拖延到了1984年1月才开始。而自由软件的很多哲学理念也是数年之后才得以厘清。 From mit-vax! mit-eddie! RMSOMiT-oZ From:"RMSOMIT-OZ@mit-eddie Newsgroups: net. unix-wizards, net. usoft Subject: new Unix implementation Date: Tue, 27-Sep-83 12: 35: 59 EST Organization: MIT AI Lab, Cambridge, MA 自由的Unix! 今年的感恩节我要去写一个完整的类UNIX软件系统,命名为 GNU(Gn' s Not unix),并以自由的方式开放给所有人使用。非常欢迎大家贡献时间、金钱、程序和设备来参与其中 首先,GNU将是一个内核加上编写和运行C程序所需的所有 工具:编辑器, Shell,C语言编译器,链接器,汇编器,以及些其它的东西。在此之后,我们将添加一个文本排版工具, 个YACC,一个帝国的游戏,电子表格,以及数百种其它的东 西。我们希望最终可以提供一切通常和UNX系统一起出现的 有用的东西,并包括一份在线的和印刷版的文档 GNU可以运行UNX程序,但不会与UNIX完全相同。我们会 基于在其它系统上的经验完善之以使其更舒适。特别的,我们 1这里用词没有注意,初衷是想说没有人需要为使用GNU系统而索要授权。然而这个词没 有说的很清晰,结果人们经常以为获取GNU的副本需要很少或者免费。而这从来都不是目的。 29 ==========第47页========== 30第1部分GNU计划和自由软件 计划使用更长的文件名,文件版本号,抗崩溃的文件系统,可能还有文件名自动补全,独立于终端的显示支持,以及一个基于Lisp的窗口系统,最终所有Lisp程序和Unix程序都可以共亨同一个屏幕。C语言和Lisp都可以作为系统编程语言。还会有基于MIT的 chaosnet协议的网络软件,会远远优于UUCP 我们还会有某些东西来兼容UUCP 我是谁? 我是理查德·斯托曼,备受模仿的原版 EMACS编辑器的发明 者,现在供职于MIT^(麻省理工大学)的人工智能实验室。我 广泛从事过编辑器、编译器、调试器、命令解释器、不兼容分时系统、Lisp机器操作系统。我率先在终端独立显示支持IS。此外我还实现了一个可靠的文件系统和两个Lisp机器的窗口系统 我为什么必须写GNU 我信奉的一条金科玉律就是如果我喜欢一个程序,那么我必须与其他人一起分享。我不能凭良心签署保密协议或软件许可协议 因此我不能继续使用那些破坏我原则的电脑,因此我决定将所有自由软件组合在一起,这样我就可以不使用任何不自由的软件了。 如何贡献其中 我正在向计算机厂商索要捐献一些机器和金钱。还向一些个体索要程序和作品。 其中一家厂商已经提供了我一台机器。但我们可以用更多。如 果你能捐助更多机器,那么GNU将会更早地在上面运行。机 器最好能够在一个住宅区内进行操作,并且不需要复杂的冷却或供电 ==========第48页========== 1.3GNU操作系统的初始公 31 独立程序员可以写一些Unix工具的兼容复制品并将其贡献给我。对大多数项目而言,如此大规模的分布式项目通过兼职很难协作,独立完成的部分可能很难组合在一起。然而对替换 Unⅸx的任务而言,这个问题并不存在。大多数接口规格已经通过Unix兼容固定下来了。如果每个贡献者的作品都可以和 Unix的剩余部分工作在一起,那么多半一样可以和GNU的剩余部分一起工作 如果我获得了捐助的金钱,我可能需要聘用一些人全职或者兼职工作。薪水可能不高,但是我希望能找到这样的人,对他们而言认识到自己工作是帮助人类和赚钱一样重要。我将其看作种让有献身精神的人们无需按它法谋生,而将他们的全部精 力投入到GNU的工作上的途径。 联系我以获取更多资讯。 Arpanet邮件 RMS⊙MIT-MC.ARPA Usenet mit-eddie! rMS@oz I mit-vax! RMSeoz 美国邮政 Richard stallman166 Prospect St Cambridge, Ma 02139 31 ==========第49页========== 32第1部分GNU计划和自由软件 如今自由软件更加重要 Copyright◎2015理查德·斯托曼( Richard stallman)。此文大幅修改后发表于《连线》杂志(Wied)网站,标题是“ Why Free Software Is More Important Now Than Ever Before”,2013年9月28日 自1983年以来,自由软件运动一直在为计算机用户的自由而战——用户控制他们使用的软件,而不是相反。当一个程序尊重用户和社区的自由时,我们把它称为“自由软件” 我们有时也称之为“ libre software”以便澄清我们关注的是自由,而不是价格。一些专有(非自由)软件比如 Photoshop,非常昂贵;而其他比如 Flash播放器则免费提供—所以价格并不是大问题。无论高价还是免费,它们都将程序开发者的权力凌驾于用户之上,而这种权力是不应该存在的。 同时这些软件还有个共同点:他们都是恶意软件。也就是说从功能上都是设计用来虐待用户的。今天的专有软件往往是恶意软件,因为开发者的权力腐化了它们。而自由软件,用户控制着程序,既是单独用户控制同时也是群体控制。这样他们就控制着计算杌做的事情(假设这些程序都是忠实完成用户的指令) 专有软件程序控制着用户,另一些(开发者或“所有者”)则完全控制着程序。因此专有程序给了开发者凌驾用户的权力。而这本身就是不公平的,并且诱使开发者用其他方式虐待用户 自由意味着你控制着自己的生活。如果你使用程序来打理你的生活你的自由就取决于你如何控制着这些程序。你应该拥有对程序的控制权,更何况这些程序控制着你生活中重要的事情。用户对程序的控制需要四项基本的自由2。 1.基于任何目的,按你的意愿运行软件的自由 1参见http://gnu.org/proprietary/proprietary.html可知这些不断增加的威胁2自由软件的完整定义可参见《什么是自由软件?》(p.1)一文 ==========第50页========== 14如今自由软件更加重要33 2.学习软件“源代码”并修改的自由,这样可以让程序执行你想做的事情。程序是由程序员使用编程语言编写的(比如结合英语和代数),这种形式称为“源代码”。任何熟悉编程,并能以源代码形式编程的人,都可以读源代码,懂得其逻辑,并可以修改之。当你只能得到可执行格式,也就是对计算机来说能理解,但对人类极难读懂的一系列数字时,读懂并修改该形式的程序难如登天 3.将当前副本重新分发的自由(这不是一种义务,这样做是你的选择。如果程序是自由的,并不意味着别人有义务提供给你一份副本,或者你有义务为其他人提供副本。分发程序而没有自由,会虐待用户。然而如果不分发软件——只是私下使用——则不会虐待任何人) 4.随时分发你修改过的版本的自由。 前两个自由表示用户可以实际控制程序。而剩下的自由,表示任何用户团体都可以集体控制程序。具备这四个自由,用户就可以完全控制程序。这四个自由缺一不可,否则程序就是专有的(非自由的),并且不道德任何实用性的作品都可以适用,包括烹饪菜谱,教育作品比如教科书, 参考书比如字典和百科全书,显示文章的字体,硬件设计的电路程序,3D 打印用的(不只是装饰品)模型文件。因为这些并不是软件,所以自由软件运动严格上来说并不包括它们,但同理可证:这些作品也需要符合上面这四项自由。 个自由的程序允许你按照自己的想法去改造。对于将专有软件看成密封盒子的人来说,改造软件看起来很荒谬,然而在自由的世界里则是非常普遍,并且对学习编程非常有利。传统美国消费者对汽车的改造并不顺畅,恰是因为汽车包含非自由的软件。 专有化的不公 如果用户没有控制程序,那么程序就在控制用户。对专有软件,有些实体比如开发者或者程序“所有者”,控制着程序,将权力凌驾于用户之上。一个非自由的程序就像个操纵杆,是一把操纵不公权力的工具。 33 ==========第51页========== 34第1部分GNU计划和自由软件 令人发指的是(这种情况很常见)专有程序设计用来窥视、限制、审查甚至虐待用户1。例如苹果的 iThings操作系统做了所有这些,同样的基于ARM芯片移动设备上的 Windows系统也是如此。 Windows手机固件以及 Google Chrome的 Windows版包含了通用后门,可以让一些公司不经过用户同意就远程修改程序。亚马逊的 Kindle则通过后门删除用户的电子书。 物联网”( internet of things)产品上使用的非自由程序会将物联网变成“骗联网”( internet of telemarketers)2或“窥联网”( internet of snoopers)为了结東非自由程序的不公,自由软件运动开发了自由的程序,这样 用户可以解放自已。我们首先在1984年开始开发自由的操作系统GNU。 现在数以万计的计算机运行着GNU,主要是 GNULinux结合体3 分发非自由的程序给用户是残害用户的行为;然而如果不分发程序则不会伤害任何人。如果你写了一个程序并私下使用,不会伤害到任何人你也许会失去做好事的机会,但这与做错事是不一样的。因此,我们说所有程序都应该自由,意思是所有副本都应该遵循这四个自由,但并不意味着别人有义务提供给你一份副本 非自由软件与 Saas 非自由软件是公司控制人们电脑的首选方案。今天,还有另外一种方式,称为“替代软件的服务”( Saas, Service as a software substitute)。这意思是让别人的服务器去做你自己的计算任务。 SaSS并不意味着运行在服务器上的程序是非自由的(虽然大多数确实是非自由的)。然而,使用SaSS会导致与使用非自由程序一样的不公殊途同归。就拿SaSS翻译服务为例:用户发送文本到服务器,服务器将其翻译好发回用户(比如从英文翻译为西班牙文)。那么翻译的工作是由1参见《自由与非自由软件的分类》(p.80)一文中关于专有软件的脚注1 2参见Marcelorinesi于2015年8月6日发表的文章TheTelemarketerSingularityhttp://ieet. org/index. php/IEET/more/rinesi20150806 3关于GNU操作系统的历史可参见《GNU工程》(p.8)一文,以及“ GNU/Linux FAQhttp://gnu.org/gnu/gnu-linux-faq.html ==========第52页========== 14如今自由软件更加重要35 服务器运营商控制的,而不是用户 如果你使用SaSS,服务器运营商控制着你的计算过程。它需要委托所有数据到服务器运营商那里,而这些数据也可能会被迫出让给国家—毕竟谁是服务器真正服务的人1? 主要和次要的不公 当你使用专有软件或者SaSS,首先你对自已不好,因为这给了别的实体可以用不公的权力凌驾你之上。所以为你着想,你必须远离非自由的程序。如果你承诺不分享程序,你就在对他人不好。这个承诺本身就是罪恶,不那么罪恶的是打破承诺;最好的做法就是你应该完全不作出这样的承诺 有一些非自由的程序会直接给用户施压。 Skype就是一个例子:当用户使用了一个非自由的 Skype客户端软件,它会要求其他人使用同样的软件—这样两个人都将自由放弃了( Google Hangouts也有同样的问题)。建议使用这样的软件也是同样的错误。我们必须坚决拒绝它们,即使是短时间,即使是在别人的电脑上。 另一个使用非自由程序和SaSS的害处是会嘉奖肇事者,鼓励他们开发更多这样的程序或“服务”,导致更多人掉入公司的陷阱所有这些间接伤害发生在公共实体或学校的时候会更加显著。 自由软件与国家 公共机构是为人民服务的,而不是为他们自己。在计算机领域也是如此。他们有义务完全控制计算过程以确保恰当地为人民服务(也就是所谓的国家计算主权)。他们决不能让计算机的控制权落入私人之手 为了维持对为人民服务的计算过程的控制,公共机构必须不能使用专有软件(一个由国家之外的实体掌控的软件),同时不能委托国家机构以外的实体编写或运行服务,因为这会是SaSS。1参见《服务器真正是在为谁服务?》(p.302)一文 35 ==========第53页========== 36第1部分GNU计划和自由软件 专有软件在非常时期是没有安全可言的—因为无力抵抗其开发者甚至开发者会帮助其他人攻击。微软会在修复 Windows的bug之前将其展 示给NSA1(美国数字间谍机构)。我们不知道苹果是不是也这样做,但他 们同样受到与微软一样的政府压力。如果其他国家政府使用这样的软件, 会危害国家安全2。你会希望NSA攻入你自己国家政府的计算机吗? 自由软件与教育 学校(包括所有这类教育活动)通过他们的教学会影响社会的未来为了做善事他们必须只教自由软件。教授专有程序会产生依赖性,这与教育的使命是相悖的。通过培训使用自由软件,学校会将社会的未来转向自由,并帮助天才的程序员掌握这门手艺 他们同时也教育了学生协作的习惯,帮助其他人。每个班级都要有这样的规则:“对学生而言,这个班级是分享知识的地方,如果你将一个软件带来,不仅仅是你自己用,同时你必须将副本分享给班里其他人——包括源代码——以备其他人想要学习。因此,不允许将专有软件带到课堂,除非学习逆向工程。 专有软件的开发者会惩罚那些好心分享软件的学生,并阻挠学生企图修改的好奇心。这是很烂的教育3。 自由软件:不止“优势” 经常有人让我描述自由软件的“优势”。然而“优势”这个词对自由而言太弱了。没有自由的生活是一种压迫,无论是我们平时的生活还是计算机领域。我们必须拒绝让软件或计算机服务的开发者控制我们的计算机。这才是我们要做的事情,虽然有自私的因素;但不仅仅是自私的考量。1参见 Sean gallagher于2013年6月14日发表的文章 NSA Gets Early Access to Zero DayDatafromMicrosoftOthers"http://arstechnica.com/security/2013/06/nsa-gets- Eearly-access-to-zero-day-data-from-microsoft-others/2关于我们建议的政策可参见《政府推动自由软件的措施》(p.41)一文3有关自由软件在学校的讨论可参见http://gnu.org/education ==========第54页========== 14如今自由软件更加重要37 自由包括与其他人协作的自由。拒绝人们的这项自由意味着让人孤立,会成为对人压迫的开始。在自由软件社区,我们深刻的意识到与他人协作的重要性因为我们的工作正是有组织的协作。如果一个朋友看到你在用个程序,她也许会要一份副本。而禁止人们再分发,或者说你“不应该”这么做的程序,是反社会的。 在计算机领域,协作包括向用户再分发原始副本,也包括分发你修改过的版本。自由软件鼓励所有这些协作,而专有软件禁止这些。专有软件禁止再分发副本,并拒绝提供给用户源代码,封锁人们对软件的修改。 SaSS也有同样的效果:如果你的计算过程是由互联网上其他人的服务器,其他人的程序副本做岀的,你不能看到或碰触到这些计算用的软件,因此你就不能再分发或修改了 结论 我们应该控制我们自己的计算机,如何赢回控制权?可以拒绝使用我们自己或平时所用计算机上的非自由软件,拒绝SaSS。对于我们这些程序员而言,可以开发自由软件1,还可以拒绝开发或者推广非自由软件或 SaSS,并广泛散播这些理念给其他人2。 我们以及上千用户从1984年开始就这么做,这样才有了现在我们使用的自由的 GNU/LinuX操作系统,所有人—无论是否是程序员——都可以使用。以一个程序员或活动家的身份,加入我们的事业。让我们一起解放所有计算机用户吧 1关于许可证的建议可参见《如何为你的作品选择一份许可证》(p.2)一文中的推荐许可证 2各种帮助的方式可参见http://gnu.org/help 37 ==========第55页========== 38第1部分GNU计划和自由软件 为什么学校应该只使用自由软件 Copyright@2003,2009,2014 Richard stallman此文最早于2003年发布在htrp://gnu.org。 教育性的活动(包括学校里的)有道义责任只教授自由软件。 所有计算机用户都应该坚持使用自由软件:这会让你获得控制你自己计算机的权利——专有软件更愿意做其拥有者或开发者想要做的事情,而不是用户想让它们做的事情。自由软件还会赋予用户自由协作的权利,这将会引领一种积极向上的生活方式。这些理由适用于学校,而且也适用于每个人。但是,本文的目的不仅限于此,还会讲到专门适用于教育领域的特殊原因。 自由软件可以帮助学校节省经费只是一个连带好处。节省经费是因为自由软件赋予学校,如同赋予其他个人用户那样,自由复制和分发软件的权利。教育系统可以给每一所学校一份副本,而且每一所学校都可以将其安装在学校的每一台电脑上,这样做无需支付任何费用。 尽管这项好处很有用,但我们坚定地拒绝将其置于首位,因为与道义层面性命攸关的重要问题相比,它显得微不足道。推动学校使用自由软件,不只是让教育变得稍微“好一点”的一个方法,也是一件让好教育替代烂教育的大事。所以,我们来探讨一下这个更深层次的问题。 学校有一项社会使命:要教导学生成为一个坚强、有才能,独立、相互协作并且自由的社会中的一名公民。学校应该像推广保育和选举一样推广自由软件的使用。通过教授自由软件,学生能成为自由的数字化时代的合格公民。这项工作能帮助社会从整体上脱离大集团公司的统治 相比之下,如果我们教学生使用非自由软件,就等同于培养依赖性,这将违背学校的社会使命,学校应该极力避免这种事情的发生 为什么呢?毕竟一些专有软件开发者可以免费给学校的提供非自由程序的副本。那是因为,就像烟草公司免费向学生发放香烟一样,他们希望 ==========第56页========== 15为什么学校应该只使用自由软件39 利用学校给学生灌输这种对他们产品的依赖性1。 当学生毕业之后,他们就会终止这种免费行为,而且,他们也不会为毕业生就职的公司或机构提供免费服务。你一旦对这些软件形成了依赖,你很可能就会付费,并且之后的升级可能会很昂贵。 自由软件可以让学生了解和掌握这些软件的工作原理。有些学生,或者那些天才程序员,青少年时代就对计算机和软件充满好奇心,他们急切地想要获知他们想要知道的一切。他们非常渴望阅读那些他们每天都在使用的软件的源代码。 专有软件阻抑了学生对知识的渴望:他们被告知,“你想要获得的知识是一个秘密,禁止学习!”专有软件是教育精神的敌人,所以,除非作为逆向工程的目的,学校应该拒绝使用它们。 自由软件鼓励每个人学习。自由软件社区反对“高高在上的技术”这会让大众对技术的基本原理敬而远之。我们鼓励任何年龄层次学生或个人阅读源代码,而且,我们希望他们学得越多越好。 使用自由软件的学校将会成为那些喜爱编程学生的乐土。你知道喜欢编程的学生是怎样成为优秀的程序员的吗?他们必须要阅读和理解人们真实使用的软件的源代码。通过阅读和编写大量的代码,你才有可能写出高质量清晰的计算机程序。目前来看,只有自由软件允许你这样做。 如何学习为大型软件项目编写代码?最好的办法就是为现有的大型项目编写大量代码。自由软件鼓励你这样做,但专有软件会棼止如此。任何学校都可以给学生提供这种掌握编程技术的机会,但只有使用自由软件的学校才真正有这个可能。 学校使用自由软件最深层次原因是可以进行德育教育。我们希望学校教给学生基本的知识和有用的技巧,但是这只是学校工作的一部分。学校最根本的一项职能,就是培养好公民——其中包括助人为乐的习惯。在计算机领域,这就意味着我们需要教授学生分亨软件的精神。从幼儿园开始1参见《雷诺烟草公司因向儿童发放卷烟样品,于2002年被罚1500万美TT(RJ Reynolds Tobacco Company was fined $15m in 2002 for handing out free samplesofcigarettesateventsattendedbychildren)http://bbc.co.uk/worldservice/sci_tech/features/health/tobaccotrial/usa.htm 39 ==========第57页========== 40第1部分GNU计划和自由软件 学校就应该告诉学生,“如果你把软件带到学校来,你应该与其他同学起分享。一旦有人想要学习一下它的工作原理,你就应该把源代码展示给大家。所以说,非自由软件最好不要带到学校来,除非出于反向工程的目的 当然,学校必须履行其诺言:在课堂上只允许自由软件出现(除非为了逆向工程的目的),在分享软件的同时,源代码也应该一并分享,这样的话,学生们就能复制它们,把它们带回家,甚至还可以将它们再次分享给其他人。 教授学生使用自由软件,让他们参与自由软件社区,就是一门生动鲜活的公民教育课程。这门课程教授将会把学生培养成为具有公共服务精神的行为模范,而不是垄断企业的超级大亨。所有学校都应该使用自由软件如果你和学校有一定联系——如果你是一名学生、一名教师、一位员工、一名管理者、一位捐赠人,或者这些人的父母——你有义务和责任向学校推广自由软件。如果私人请求无法解决这个问题,可将这个问题公开出来提交到社区。这样就能让更多的人意识到这件事情的重要性。你可以寻找同盟,让大家一起发起这项推广自由软件的运动。 ==========第58页========== 1.6政府推动自由软件的措施41 政府推动自由软件的措施 Copyright◎2011-2014自由软件基金会,此文于2011年首次发表在http://gnu.orgo 本文提出了一些推动自由软件在国内发展的强力政策,并引领国内其他方面转向软件自由 国家的使命是通过整合社会资源为人民自由谋福祉。这个使命在计算机领域的一个方面就是鼓励用户使用自由软件:代表用户自由的软件1。而专有(非自由)软件则践踏了人民的自由;这是一个国家应该努力去根除的社会问题 从国家的计算主权角度来说,国家需要坚持自由软件的主张(国家控制其计算过程)。所有用户理所应当控制自己的计算过程,但国家有代表人民对计算过程维持控制的责仼。现在大多数政府活动都依赖计算过程,而对这些活动的控制则依赖于对计算过程的控制。而在任务很关键的机构里失去这种控制将会极大危害国家安全。 将国家机构转向自由软件同时也会提供额外的好处,比如节省经费和鼓励本地的软件支持行业等等 本文中,“国家实体”指代各级政府,以及公共机构包括学校,公共—私立伙伴关系,主要由国家出资的活动比如特许公立学校,以及由国家控制或由国家特许经营或注资的“私营”企业 教育领域 教育领域的政策非常重要,因为会影响国家的未来 能教授自由软件 教育活动或者至少这些国立教育实体,必须只教授自由软件(因此他们决不能引导学生使用非自由程序),并教育学生坚持使用自由软参见《什么是自由软件?》(p.1)一文了解自由软件的定义 ==========第59页========== 42第1部分GNU计划和自由软件 件背后的公民原因。教授非自由程序就是在教授依赖性,这与学校的使命是相悖的。 国家与公众 这些政策对个人与组织使用软件的影响也很巨大 ·永远不要求非自由程序 法律和公共部门实践活动必须改革永远不能要求或施压给个人或组织使用非自由程序。他们还必须不能在通信或出版行业引入类似的规定(包括数字限制管理 Digital Restrictions Management1)。 散播自由软件 国家实体无论在什么时候将软件公开散播,包括网页中包含或附带的程序,必须作为自由软件散播,且必须与只运行自由软件的平台兼容 ·政府网站 政府实体的网站和网络服务必须设计成用户能够只用自由软件而没有障碍(相对专有软件——译者注)地使用。 自由的格式和通信协议 国家实体必须只使用自由软件广泛支持的文件格式和通信协议,特别是已经公开的规格(我们并不说“标准”,因为它应该适用于标准和非标准的接口)。例如,他们必须不能散播使用Fash或者非自由解码器播放的音频或视频文件,公立图书馆必须不能包含数字限制管理 解除对计算机的限制性许可证 1参见反DRM活动网站http://defectivebydesign.org/what_is_drm以及《应避免使用(或慎用)的词语》一文中有关DRM的章节(p.115)了解相关问题 ==========第60页========== 1.6政府推动自由软件的措施43 销售计算机必须不能要求购买一份专有软件许可证。必须通过法律来约東销售方提供给消费者购买计算机时不需要专有软件以及不需要为此付费的选项。强制付费是另一个错误,不能让我们从专有软件的不公中分散注意力,应更关注失去自由而导致的损失。虽然如此,强迫用户为其付费等于是给了特定专有软件开发者一个额外的不平等优势——让他们来决定用户的自由。国家应该防止这种情况发生 国家计算主权 很多政策会影响到国家计算主权。国家实体必须维持对它们的计算资源的控制,而不是放弃控制而委之于私人之手。这一点适用于所有计算机包括智能手机。 迁移到自由软件 国家实体必须迁移到自由软件,并且不能安装和继续使用非自由软件,除非临时例外。只有一个机构可以有权授予这些临时例外,且需要令人信服的理由。这个机构的目标是将这些例外必须减少到零。 开发自由的I解决方案 当政府实体需要为开发计算机解决方案付费时,合同必须要求以自由软件形式交付,并且方案必须设计为可以在百分之百自由软件环境中运行和开发。所有合同都需要这条,这样如果开发商一旦不符合需求,作品就不给报酬为自由软件选配计算机 当政府实体购买或租借计算机时,必须在其等级中选择几乎无需专有软件即可运行的型号。政府需要为每个等级的计算机维护一个按此标准授过权的型号的列表。对于公开型号和政府采购型号,应该选择只对政府开放的型号。 与厂商协商 43 ==========第61页========== 44第1部分GNU计划和自由软件 国家必须经常与厂商协商市场(对外销售或/和面向政府)上适合的硬件产品,在所有相关产品领域,都不能需要专有软件。 ·与其他国家联 本国需邀请其他国家来和厂商一同协商适合的硬件产品。联合它们获得更多影响力。 国家计算主权之二 国家计算主权(和安全)包括控制计算机做国家的事情。这需要(1)避免“替代软件的服务”( Service as a software substitute)1除非这类服务是运行在国家机关的同一分支机构,以及(2)其他降低国家对计算资源控制的实际行动。因此 ·国家必须控制其计算机 每一台国家使用的计算机必须从属于政府的同一个要使用它们的分支机构或由此机构租借,而这个政府分支机构必须不能把决定谁有权物理访问计算机,谁能维护(软件和硬件),或者能够安装什么软件的权力放弃给外人。如果计算机不可移动,那么计算机所在的物理空间必须是国家所有(无论是所有者或者承租人)。 对开发的影响 国家政策会影响自由和非自由软件的开发 鼓励自由 国家需要鼓励开发者创立或完善自由软件并将其公开,比如通过减税或其他财政补贴的方式。相反,对非自由软件的开发者则没有此类财政补贴 1参见《服务器真正是在为谁服务?》(p.302)一文的相关章节,了解 Saas ==========第62页========== 1.6政府推动自由软件的措施45 不要鼓励非自由 特别的,专有软件开发者不应该“捐献”软件副本给学校,并根据软件的售价申请减税优惠。专有软件在学校是不合法的。 电子垃圾 自由不应意味着产生更多电子垃圾 可替代性软件 很多现在计算机设计为无法用自由软件替代其预装的软件。因此唯解放它们的方式就是丢掉,而这对社会不利。 因此,对于新(即,非二手)计算机或基于计算机的产品,阻碍用户开发、安装或阻碍用户替代任何内部能由制造方升级的预装软件的,硬件接口保密或有意设限的,大量销售、进口或分发的行为都应该是非法的,或者至少课以重税来劝退。这特别适用于任何需要“越狱”方可在其上安装不同操作系统的设备,或包含保密接口外设的设备 技术中立 通过本文中给出的措施,政府可以恢复对其计算过程的控制,并引导国家公民、商业和组织控制自己的计算过程。然而,很多反对意见认为这会违反技术中立的“原则”。 技术中立是指国家不应该在技术选型时强加干涉。无论这是不是有效的原则或是争议,这仅仅只涉及到技术问题。而这里提出来的措施解决的是道义、社会和政治问题,因此超出了技术中立的范畴。除非他们觉得其政府需要在主权和公民自由上保持“中立” 1参见我的文章techNologicalNeutralityandFreeSoftware"http://www.gnu.org/philosophy/technological-neutralityhtml 45 ==========第63页========== 46第1部分GNU计划和自由软件 为什么自由软件需要自由的文档 Copyright◎1996-2007,2009自由软件基金会。 自由的操作系统最大的不足并不在于软件——而是缺乏可以收录其中的优秀自由手册。我们很多重要的程序还没有完善的手册。文档是任何软件包的重要组成部分;当一个重要的自由软件包发布,却没有附带自由的手册,这会是一个严重的缺陷。而这样的缺陷现在有很多。 曾几何时,多年以前,我想学习一下Perl。并得到了一份自由手册,但我发现很难读懂。当我寻问Per用户有没有替代品,他们告诉我,有更好的入门手册,但那些不是自由的 为什么会如此?作者为 O'Reilly协会编写了优秀的手册,而 O'Reilly附加了限制条款岀版这些手册——不能复制、不能修改、不能获得源文件—这使得它们被排除在自由软件社区之外 这类事情绝不是第一次发生,而且(对我们社区是巨大的损失)远非最后一次。专有手册岀版商诱使许多作者限制他们的手册。很多次我听到 GNU用户急切地告诉我他正在写一本手册,他希望以此来帮助GNU计划, 但是随后我的希望破灭了,因为他接着解释说,他已经与出版商签署了项限制它的合同,所以我们不能使用它 鉴于编写好的英文手册是程序员中难得的技巧,因此我们就更承担不起因此而失去手册。 和自由软件一样,自由文档是一个关乎自由的问题,并非价格。这些手册相关的问题不是因为 O'Reilly对印本收取了费用这本身不是间题 (自由软件基金会也销售自由的GNU手册印刷版1)。但GNU手册能以源 代码形式获得,而这些(专有)手册只能以纸张的形式获得。GNU手册允 许复制和修改;Per的手册则不可以,这些限制就是问题所在 自由手册的规范与自由软件的规范大致一样:它给所有的用户一定的自由。必须允许重新发布(包括重新商业发布),因此手册可以随着每一份程序,发布到网络上或发行印刷版。允许修改手册也是十分关键的。jlhttp://shop.fsforg/category/books/fhhttp://gnu.org/doc/doc.html ==========第64页========== 17为什么自由软件需要自由的文档47 作为一般准则,我不认为允许人们修改各种文章和书籍是必要的。写作问题不一定和软件问题相同。例如,我不认为你或我有权利去修改像这样一篇表明我们行为和看法的文章 不过,自由软件文档的修改对自由很重要,这里有个特殊的原因。当人们行使他们修改软件的权力的时候,添加或是修改软件功能时,若有责任心的人,他们也会同时修改软件的手册——以便为修改后的软件提供准确可用的文档。一本手册若让编程人员不能尽责完成他的工作,或更确切地说要求程序员修改程序之后重新写一份手册,是不能满足我们社区的需求的。 尽管全面棼止修改是不可接受的,但一些受限的修改方法还是可以接受的。例如,要求保留原作者的版权声明,发布条款或是作者名单,上述这些都是可以的。要告知版本已经被修改,甚至不许删除或修改整个章节,只要这些章节处理的是一些非技术性话题,像这些要求都没问题(一些 GNU手册就是如此)。 这类限制不是问题所在,因为作为一个实际问题,他们没有阻挡有责任心的程序员去修改手册以适应修改过的程序。换句话说,他们没有阻止自由软件社区充分利用该手册。 然而,它必须能修改手册所有的技术内容,且随后通过所有常规渠道,在所有常规媒介中发布结果。否则,这些限制一定会阻碍社区,将手册变得不自由,而因此我们将会需要另一本手册。 很不幸的是,在专有手册存在的情况下往往很难发现有人写了另一本手册。问题在于很多用户认为专有手册已经足够好,因此他们没有意识到撰写自由手册的必要性。他们没有意识到自由操作系统还有缺陷仍需完善 为什么用户认为专有手册足够好了呢?因为有些人不考虑这个问题我希望本文将为改变这种状况做点贡献 其他用户认为,专有手册可以被接受和许多人认为专有软件可以被接受有着同样的原因:他们纯粹是以实际需求来评判,而不将自由作为一项判断依据。这些人有权表达观点,但由于这些观点滋生于不自由的价值观, 47 ==========第65页========== 48第1部分GNU计划和自由软件 所以无法指导我们这些切实重视自由的人。 请将这个问题公之于众。我们仍然认为需要减少专有手册的出版量。 如果我们传播专有手册不够好的言论,也许下一个愿意帮助GNU写文档 的人将会在不是太晚的时候认识到,他必须首先使它自由 我们也可以鼓励商业出版商销售自由、 Copyleft的手册以代替专有手册。而帮助这项事业的方法是在购买之前检查手册的分发条款,尽量购买copyleft的手册,而不是非 copyleft的手册 1其他出版商的自由图书可见此列表:http://gnu.org/doc/other-free-books.html ==========第66页========== 18售卖自由软件49 售卖自由软件 Copyright@1996-1998,2001,2007,2015自由软件基金会。此文于1996年首发于htp:/gnu.org 很多人认为GNU工程的精神就是不该对软件发行的副本收费,或者 应只收取很少的钱 要是成本价即可。这是一种误解 事实上,我们鼓励重新发布自由软件的人尽可能多的收取他们想要的费用。如果一个许可不允许用户销售生成的副本,它就是个非自由许可。如果这让你感到惊讶,请继续往下读。 re”这个词有两种合理通用的解释,它可以被解释为自由亦或是免费价格。当我们谈到“ free software”时,我们所指的是自由,而不是价格。(可以理解为“言论自由”,而不是“免费啤酒”)。明确地讲,自由软件的意思就是任何用户可以自由的运行、修改和免费或收费地重新发布修改过或未修改的程序 自由的程序有时是免费发布的,而有时则需要收费。有时同一个程序可以在不同的地方分别以这两种方式发布。无论其价格如何,这种程序都自由的,因为用户在使用时是自由的 非自由程序通常以高价出售,但有时销售商会赠送你一份免费副本尽管如此,那也不能使其成为自由软件。无论收费与否,这个程序都是不自由的,因为用户没有自由 因为自由软件无关价格,所以低价并不意味着更多自由,或者更加接近自由。因此如果你重新发布自由软件的副本,你也可以收取基本的费用来获得收益。重新发布自由软件是一种很好而且合法的行为;如果你那样做,你同样也可能从中获利 自由软件是一项社区工程,每个依赖社区的人都应该尽其可能为社区建设做出贡献。对一个发布者来说,这样做可以使一部分收益流向自由软件开发项目或者自由软件基金会。只有这样才能推动自由软件在世界的发1参见《什么是自由软件?》(p.1)一文 2也称为“专有软件”,参见《自由与非自由软件的分类》的相关章节(p.87)一文 49 ==========第67页========== 50第1部分GNU计划和自由软件 展 发布自由软件是筹集资金的一个机会。不要浪费这个机会! 为了捐献金钱,你需要收取一些额外的费用。如果你收费过低,那就不能为支持自由软件发展而储备资金 过高的发行费用会伤害一些用户吗? 有时人们担心过高的发行费用会使自由软件超出低收入用户的预算对于专有软件,高昂的费用确实如此—但自由软件与之不同 不同之处在于自由软件天生就易于传播,可以通过多种方式来获取在你没有支付标准价格之前,软件囤积者尽他们该死的最大努力阻止你使用专有软件却不按标价付钱。如果这个定价很高,的确会让一些用户很难使用这个软件 对于自由软件,用户不必须为了使用软件而支付发行费用。可以从拥有一份副本的朋友那里复制程序,或者请能上网的朋友下载程序。或者很 多用户可以一起分摊费用买一张 CD-ROM,然后轮流安装软件。当软件自 由时,高价的CD-ROM就不再是主要障碍 昂的发行费用不利于自由软件的使用吗? 另一个经常担心的问题是自由软件的传播。人们认为高昂的发行费用会减少用户数量,或者低廉的价格可能会鼓励用户去使用。 对于专有软件确实是这样——但是自由软件与之不同。可以通过如此多的方式来获得软件副本,因此发行服务的费用对自由软件的普及影响很 从长远来看,使用自由软件的用户数量主要取决于自由软件可以做什么,以及自由软件有多好用。很多用户并不把自由放在首位;如果自由软件不能做他们要做的所有工作,许多用户将继续使用专有软件。因此,如果我们想从长远上来增加自由软件的用户数量,我们的首要任务是开发更多的自由软件。 50 ==========第68页========== 18售卖自由软件51 最直接的方式就是自己写一些需要的自由软件或手册2。不过如果你是发行方而不是编写软件,你提供帮助的最好方式就是提供资金给其他人来写自由软件和手册。 售卖软件”这个说法也很迷惑 严格来说,“售卖”是指通过货物交易来获取金钱。销售一份自由软件的副本是合法的,而且我们鼓励这种行为 然而,当人们想到“售卖软件”时3,他们通常想象成大多数公司的做法:使软件专有化,而不是自由。 因此,除非你打算伃细分析甄别,正如这篇文章所言,我们建议最好避免使用“售卖软件”这个说法,而选用其他说法来代替。例如,你可以说“为发行自由软件收费”—这样就不会有歧义了。 收费的高低与 GNU GPL 除非一种特殊情况,GNU通用公共许可证( GNU GPL)对于你发布 自由软件的副本时收取多少费用并没有要求。你可以免费,一美分,一美元,或者十亿美元。这完全取决于你和市场,所以如果没有人愿意花十亿美元买你的软件请不要向我们抱怨。 唯一例外的情况是只发布二进制(的格式)而没有(发布)相对应的 完整源代码。这样做的人, GNU GPL会要求其为后期需求提供源代码。如 果对于源代码没有价格上的限制4,他们可以确定一个没有人能支付得起的庞大数目——比如十亿美元—并且假装发布源代码,但本质是在隐藏源代码。因此,在这种情况下我们必须限制源码价格,以确保用户的自由。 一般情况下,我们没有理由限制发行费用,所以我们不限制他们1参见Savannah任务列表http://savannah.gnuorg/projects/tasklist2参见http://gnu.org/doc/doc.html 3参考《应避免使用(或慎用)的词语》一文的“贩卖软件( Sell software)”一节(p.124)文了解为何“售卖软件”这个说法有歧义 4参见巛GNU通用公共许可证》一文的第六段(p.234) 51 ==========第69页========== 52第1部分GNU计划和自由软件 有时公司的活动超出了 GNU GPL所许可的范围,他们辩解说“没有 对GNU软件收费”或者其他类似的理由。无论怎么样,他们都没有因此得 逞。自由软件是关于自由的,并且遵循GPL就是捍卫自由。当我们维护用 户自由时,我们没有因为思考需要收取多少发布费用而心烦意乱。自由才是问题所在,是全部的问题,也是唯一的问题 52 ==========第70页========== 19自由硬件和自由硬件设计53 自由硬件和自由硬件设计 Copyright◎2015 Richard stallman。本文分成两部分,分别以标题“为什么我们需要自由的电子硬件设计”htp://wired.com/2015/03/need-free- digital- hardware- designs和“硬件设计必须自由,如何行动见此http://wired.com/2015/03/richard-stallman-how-to-make-hardware-designs-free, i表于《连线》杂志网站2015年本文发布于http://gnu.orgo 自由软件的思想向硬件延伸到什么范围?让我们的硬件设计自由是不是个道德义务,正如使我们的软件自由那样?维持我们的自由是否需要抵制出自非自由设计的硬件? 定义 自由软件事关自由,而非价格;宽泛地讲,这意味着用户有使用软件的自由和复制并再分发软件的自由,免费或收费。更精确地,其定义可用这四项基本自由1公式化的来考察。为强调“free”一词指的是自由而非价格,我们经常把法语和西班牙语中的“ libre”一词和“fre”一起使用。将同样的概念直接应用于硬件,自由硬件意为用户有使用、复制和免 费或收费地再分发硬件的自由。然而,除了钥匙、DNA、和塑料制品的外 观之外,没有用于硬件的复制机制。大多数硬件是按照一定的设计装配出来。设计先于硬件存在。 因此,我们实际需要的概念是类似自由硬件设计的东西。很简单:其意指一种允许用户使用(即,在其指导下装配硬件)和复制并免费或收费地再分发的设计方案。这种设计方案必须提供和自由软件一致的四项基本自由。 这样我们可以将按照自由的设计装配出的硬件说成“自由硬件”,或设计自由的硬件”以避免可能的误解 1参见《什么是自由软件?》(p.1)以查看四项基本自由的列表 53 ==========第71页========== 54第1部分GNU计划和自由软件 首次接触自由软件思想的人们经常认为其含义是你可以免费获得一份副本。很多自由程序可以不要钱地获取,因为下载你自己的副本无需代价,但那不是“free”在此处的含义(事实上,有些间谍软件程序——例如 Flash播放器和《愤怒的小鸟》是免费的,尽管它们不自由)。将“libe”一词和free”一起使用有助于澄清观点。 对硬件,混淆趋于走向另一方向;硬件要花钱生产,故商业化生产硬件无法免费(除非是赔本赚吆喝或添头),但这并不妨碍其设计方案变得 自由。由你的3D打印机生产出的东西可以非常便宜,但并非精确地免费 因为你需要支付原料成本。在道德方面,自由的问题完全压倒了价格问题,因为对其用户拒绝自由的设备还不如没有。 由某些人使用的“开放硬件”和“开放源码硬件”的说法具有和“自由硬件”相同的具体含义,但这些说法降低了对自由议题的重视。它们由“开放源码软件”的说法派生而来,其多少指的是自由软件,但缺少了对自由的讨论或将自由的议题展示为关乎对错的事2。为着重强调自由的重要性,日关乎自由我们就要注意谈到自由;因为“开放”做不到这一点,让我们不要用它来取代“自由”一词。 硬件和软件 硬件和软件在根本上不同。一个程序,即使取编译后的可执行形式,也是一组可被计算机解释为指令的数据集合。和任何其他数字作品相同,它可以用计算机来复制和改写。程序的副本没有固有的物理形式或化身。与之相对,硬件是一个物理构造且其物质性是关键。虽然硬件的设计可以表示为数据,甚至在某些场合下表示为程序,设计仍然不是硬件本身。 为CPU做的设计不能执行程序。你基本上不可能试着用为键盘做的设计 打字或在为显示屏做的设计上显示像素 更进一步,虽然你可以用计算机来修改或复制一份硬件设计,计算机http://gnu.org/philosophy/proprietary/proprietary-surveillance.html以查看一个在工业中扩散的监视手段的快速增长的列表。2参见《为什么说开源漏掉了自由软件的要点》(p.90)一文 ==========第72页========== 19自由硬件和自由硬件设计55 并不能将这份设计转化为其描述的物理结构。那需要装配设备 硬件和软件的边界 在数字设备中,硬件和软件的边界是什么?它遵从其定义。软件是计算机可以操作修改和复制的部分,而硬件则不可以。这是理清其区别的正确方法,因为关乎实际的后果 在硬件和软件之间有一个包含可被更新或替换,却并未打算在产品售出后更新或替换的灰色地带——固件( Firmware)。从概念上说,这个灰色地带十分狭窄。在实践上,它很重要,因为很多产品落在其中。我们可以把这样的固件看作硬件的小小延伸 有人会说原装的固件程序和场效应可编程逻辑门阵列(FPGA)“模糊 了硬件和软件的边界”,但我认为这是对事实的误读。在使用过程中安装的固件是软件;设备自带并不可修改的固件虽天生是软件,但我们可以把 它当成一种电路。如对FPGA,FPGA本身是硬件,但加载到FPGA中的 逻辑门模式是一种固件。 在FPGA上运行自由的逻辑门模式可以是一种使得数字设备从电路层 变自由的潜在有效方法。然而为了使FPGA在自由世界中可用,我们需要 为其设计自由的开发工具。其障碍是加载进FPGA的逻辑门模式文件的格 式是私密的。多年以来,没有一种FPGA的型号能够让我们不使用不自由 私有)的工具就能够为其生成逻辑门模式文件 到了2015年,用来给一种通用的FPGA型号 Lattice ice401用硬 件描述语言(HDL)写成的输入文件编程的自由软件工具出现了。现在也 可以用自由工具编译C程序并在 Xilinx Spartan6LX9FPGA上运行它们2, 但这些工具不支持HDL输入。我们建议您抵制其他型号的FPGA直到它 们也能被自由的工具支持。 对HDL代码本身而言,它可以表现为软件(当运行于模拟器上或载 入FPGA中),也可以表现为硬件设计(当实现为不可变的硅晶或电路板)。 1参见http://clifford.at/icestorm/ 2Ihttps://github.com/wolfgang-spraul/fpgatools 55 ==========第73页========== 56第1部分GNU计划和自由软件 3D打印机的道德问题 道德上,软件必须自由1;不自由的程序是不义的。我们是否应当对硬件设计取同样的观点? 我们肯定应该,在3D打印(或者,更普遍地,任何个人装配行为)可 处理的领域。用于制造有用的、实用的物品(即,功能性而非裝饰性)的打印模式必须是自由的,因为它们是为了实用而产生的作品。用户应得到对这些作品的控制,正如他们应得对他们使用的软件的控制。发布一个不自由的功能性物品的设计和发布非自由程序一样有错。 请仔细甄别,并选择那些只用自由软件就能驱动的3D打印机;自由 软件基金会为这样的打印机背书2。有的3D打印机是按照自由的硬件设计 制成的,但 MakerBot的硬件设计是不自由的3 我们是否必须抵制不自由的数字硬件? 不自由的数字硬件设计是否不义?我们是否必须为了我们的自由抵制所有按照不自由的设计制造出的数字硬件,如同我们必须抵制非自由软件 因为硬件设计和软件源码在概念上是平行的,许多硬件黑客像对非自由软件那样迅速声讨非自由硬件设计。我对此并不同意,因为硬件和软件的情况不同。 今天装配芯片和电路板的技术类似印刷业:它适于工厂中的大规模生产。比起今天的软件复制,它更类似20世纪50年代的书籍复印。 复制和修改软件的自由在道德上是必要的,因为那些活动对使用软件的人们来说是可行的:你能使用软件的设备(计算机)同样适合用来复制 1参见《如今自由软件更加重要》(p32)一文 lhttp://fsf.org/resources/hw/endorsement BRich Brown, "Pulling Back from Open Source Hardware, MakerBot Angers Some Adherents,27September2012,http://cnet.com/news/pulling-back-from-open-sourcehardware-makerbot-angers-some-adherents/ 4如本文中的用法,“数字硬件”包括在数字部分之外还有模拟部分的硬件。 56 ==========第74页========== 19自由硬件和自由硬件设计57 和改写它。今天的移动计算机太弱小而难以适用于此,但任何人都能找到足够有力的计算机 而且,计算机足以用来下载并运行那些懂得如何修改软件的人修改的版本,即使你不是程序员。当然,非程序员每天都下载并运行软件。这就是为什么自由软件对非程序员有实在的贡献。 这些在多大程度上适用于硬件?并非使用数字硬件的每个人都知道如 何修改电路设计,或芯片设计,但任何有PC的人都有这么做的必要设备。 到目前为止,硬件平行于软件,但接下来区别就大了。 你不能在你的计算机上运行电路设计或芯片设计。构造大型电路是系列艰苦的工作,之后你才能得到电路板。装配芯片在今天并不适合个人完成;只有规模化生产才能让它们足够便宜。以今天的硬件技术,用户们无法像运行软件黑客某甲(原文是 John s hacker译者注)改造过的软件那样,下载并运行硬件黑客某乙(原文是 John h hacker译者注)改造过的硬件设计。因此,四项基本自由无法像给与用户们对程序的集体控制那样给与对硬件设计的集体控制。这就是一切软件都必须自由的原因无法适用于硬件的地方。 1983年没有自由的操作系统,但显然如果有了,我们可以立刻用上它并拥有软件自由。缺少的只是这样一个操作系统的代码。 而到了2014年,就算我们有了适用于PC的CPU芯片的自由设计,按 此设计大规模生产出来的芯片也不能为我们在硬件界给与我们同样的自由。如果我们要购买从工厂大规模生产出来的产品,对工厂的依赖会引发大多数和非自由设计相同的问题。我们需要未来更好的装配技术,这样才能让我们自由的设计得到硬件的自由。 可以展望这样的未来,我们的个人生产者能制造芯片,机器人可以把片和变压器、开关、按键、屏幕、风扇等组合焊接在一起。在这样的未来里,我们都可以制造自己的计算机(还有裝配机和机器人),而且我们每个人都能从懂硬件的人做岀的改造设计中得到好处。那时抵制非自由软件的议题才也能适用于硬件设计。 这个未来距今至少有数年之久。在此期间,原则上没有必要抵制非自 57 ==========第75页========== 58第1部分GNU计划和自由软件 由设计的硬件 我们需要自由的硬件设计 尽管在今天的状况下我们无需抵制按照非自由设计制造出的数字硬件,不过我们仍需要开发自由的设计并在条件允许时使用它们。这些已经在今天提供了优势,而且在未来它们可能是使用自由软件的唯一方法 自由的硬件设计提供了实用上的优势。很多公司可以装配,这减少了 对单一卖家的依赖。集团可以安排大量装配。拥有电路图或HDL代码使 得学习设计以寻找错误或恶意功能成为可能(NSA在一些计算机中促成恶 意弱点之事已被人所知)。并且,自由设计可作为设计计算机和其他复杂设备的构造砖块,其规格会被公开,对我们不利的部件也会更少。 在我们可以这样制造整台计算机之前,自由硬件设计可以用于计算机和网络的某些部件,还有嵌入式系统。 如果它成为阻止非自由软件的唯一方法,自由硬件设计甚至可能会在我们能以个人之力装配硬件以前就变得至关重要。因为一般的商业硬件正越发设计得使用户屈服,由于私密的规格,甚至需要你以外的某人签名代码,它们越发不兼容于自由软件。甚至蜂窝电话的调制解调器芯片和一些图形加速器已经需要制造商为固件签名。任何在你计算机上允许别人改但不许你改的程序,都是强加于你不义强权的体现;强加了那种要求的硬件是恶意硬件。所以蜂窝电话调制解调器芯片,现在可用的所有型号都是恶意的。 某一天,自由设计的数字硬件可能是唯一可以让自由系统运行的平台。让我们专注于在那一天之前拥有必要的自由硬件设计,并希望我们有方法为所有用户将它们足够便宜地装配出来 如果你设计硬件,请让你的设计变得自由。如果你使用硬件,请催促公司们并向其施压,让他们使硬件设计变得自由 58 ==========第76页========== 19自由硬件和自由硬件设计59 设计的层次 软件有实现的层次;例如,一个软件包可能包括库、命令和脚本。但这些层次对软件的自由没有明显的贡献,因为可以把所有这些层次都变得自由。设计程序组件和设计把组件组合在一起的代码是同类的工作;与其类似,从源代码编译程序组件和编译把这些组件组合在一起的程序是同类的操作。使整个系统自由只需继续工作直到完成整件仼务 因此,我们坚持主张程序要在全部层次上自由。对一个分类为自由软件的程序,组成它的每一行源代码都得是自由的,这样你才能只用自由的代码重建这个程序。 与此相反,物理对象经常是由不同类型的工厂设计制造的组件所构造而成的。例如,计算机由芯片构成,但设计(或装配)芯片和从芯片设计(或装配)计算机是非常不同的。 因此,我们需要区分数字产品(可能还有其他类型的产品)的设计中的层次。连接芯片的电路是一个层次;每个芯片的设计是另一层次。在 FPGA中,基本单元间的互联是一个层次,而基本单元本身是另一层次 理想的未来中我们会希望设计在所有层次上都是自由的。在当前状况下,仅仅使一个层次变得自由已经是一个明显的进步。 然而,如果一个设计在同一层次上组合了自由和非自由的部分—例 如,一个结合了私有“软核”的“自由”HDL电路——我们必须下结论说此 设计作为一个整体在那个层次上是不自由的。类似地,对非自由的“向导”或“宏”,如果它们指的是芯片间的互联或芯片内部结构间的可编程互联的部分。其自由部分可以是通向自由设计未来目标的一个步骤,但到达那目标需要把不自由的部分替换掉。它们在自由的世界中决不能接受。 自由硬件设计的许可和版权 你通过将一个硬件设计按照自由的许可发行来使其成为自由设计。我 们建议您使用第三版或更新的GNU通用公共许可证。我们带着这种用途 的视点设计了GPL第三版。 59 ==========第77页========== 60第1部分GNU计划和自由软件 在电路和非装饰性的物体外观上的左版( Copyleft),不会像想象一般获得成功。这些设计的版权仅适用于这些设计是如何被画出或写下的。左版是一种利用版权法的手段,所以其效果仅限于版权法起效的范围例如,一个电路,作为一种拓扑关系,无法拥有版权(也因此无法使 用左版)。由HDL写成的电路定义可以拥有版权(因此可以使用左版),但 左版只能保护这HDL代码的具体表达方式,而非依其生成的电路拓扑。与 此类似,电路的图纸或布局可以拥有版权,因此可以使用左版,但仅仅保护图纸或布局本身,而非电路拓扑。任何人都可以以不同的外观画出同样 的电路拓扑,或写出生成相同电路的不同HDL定义。 版权不能保护物理电路,所以当人们构建电路的实例时,设计的许可证对他们能构建出的设备做什么没有法律效力。 对物件的图纸而言和3D打印模型而言,版权不能阻止以不同的方式 绘制同样功能性物体的外观,它也不能保护按照图纸制造功能性物质的实体。只要版权考虑到,每个人都可以自由地制造和使用它们(而这是我们 十分需要的自由)。在美国,版权不涉及某个设计描述的功能特性1,但却涉及装饰特性。当一个物体既有装饰特性又有功能特性时,你将进入一个棘手的境地2。这一切也许在你的国家也是如此,也许不是。在商业性或大规模生产之前,你需要咨询当地的律师。你需要考虑的不只是版权。你可能会踩到专利地雷,其大部分被跟你正在使用的设计的诞生亳无关系的实体持有,而还可能有其他的法律问题。 切记版权法和专利法完全不同。假设他们有任何相同之处都是个错误。这就是“知识产权”的说法是完全的误导而应被彻底抵制的原因3。1参见美国版权局定义的"usefularticle??于http://copyright.gov/register/va useful. html 2一篇由 Public Knowledge所写的文章“为你的3D打印产物赋予许可的 三个步骤”htps:// publicknowledge.org/ assets/ uploads/ documents/3 Steps_for Licensing_Your_3 D Printed_ Stuff.pdf(2015年3月6日)。对其在美国的复杂性给出了很有用的信息,尽管该文落入了使用伪概念“知识产权”,和不应该和版权联用的宣传用语“保护”的常见谬误。若问为何,参见《应避免使用(或慎用)的词语,由于它们是不公正的或者引起混淆的》一文的“保护( Protection)”一节(p.122) 3参见《您说过“知识产权”吗?这是一种迷惑的幻景》(.99)一文 ==========第78页========== 19自由硬件和自由硬件设计61 通过文件仓库提倡自由硬件 通过人们发表硬件设计的文件仓库的规则来劝说他们把已发表的设计变得自由是最有效的方式。仓库的操作员应当把将要使用设计的人们的自由置于设计者的偏好之上。这意味着要求有用物品的自由设计是在该仓库中发表它们的一个条件。 付装饰性物品,此论点不适用,所以我们不必须坚持它们必须是自由的。但是,我们必须坚持它们是可分享的。因此,一个既能处理装饰性物品模型也能处理功能性物品模型的仓库必对每一类存档都有合适的许可政策 对数字设计,我建议仓库坚持使用“ GNU GPL第三版或更新”、 Apache 20或CC0。对功能性三维设计,仓库要劝用户选择以下四种许可之一 GNU GPL第三版或更新”、 Apache2.0、CC-SA、CC-BY或CC-0。对装饰性设计,要选" GNU GPL第三版或更新”、 Apache2.0、CC-0或任何CC族许可 该仓库应当要求所有设计都以源代码形式发表,且只能被私有软件使 用的私密格式源代码并不真正足够。对三维模型而言,STL格式并不是用 来修改设计的最佳格式因此不算源代码,所以仓库不该接受此格式,除非它们可能和真正的源代码一同发表 没有理由为硬件设计的源代码只选择单一的格式,但尚未能被自由软件处理的源码格式充其量只应该勉强接受 自由硬件和担保 一般说来,自由硬件设计的作者没有对按其设计装配硬件者提供担保的道德义务。这和出于销售硬件实体的问题不同,销售硬件实体必须由其卖家和/或制造者提供担保。 61 ==========第79页========== 62第1部分GNU计划和自由软件 结论 我们已经有了可以让我们的硬件设计自由的合适许可证。我们需要的是作为一个社区将其认作我们所必做之事而在我们自行装配物品时坚持自由的设计。 ==========第80页========== 110应用自由软件判断准则63 应用自由软件判断准则 Copyright@2015理查德·斯托曼( Richard stallman) 四项基本自由为判断某一特定代码片断是否为自由的(即尊重用户自由)提供了准则1。我们应当如何将它们应用于判断一个软件包、一套操作系统、一台计算机、或是一个网页是否适合被推荐使用呢? 个程序是否是自由的首先影响到的是我们对于自己的私人行为的决定:为了捍卫我们自己的自由,我们需要拒绝那些将会剥夺我们自由的程序。然而,这也会影响到我们应当对别人怎样说和怎样做。 非自由程序是不公的。发布一个非自由程序、向他人推荐非自由程序、或是更为普遍地将它们引入课程而引导人们使用非自由软件,以上这些行为意味着引导人们放弃自己的自由。可以肯定的是,引导人们使用非自由软件并不等同于在他们的计算机上安装非自由软件,但我们不应该将人们引入歧途。 在更深层次上,我们不能提出一个非自由程序作为一个解决方案,因为这将会认其合法性。非自由软件是一种问题;将其以一种解决方案的方式呈现否认了这一问题的存在2。 本文阐述了我们应当如何应用自由软件的基本准则来判断不同种类的事物,并且决定是否应该推荐它们 软件包 个软件包若要成为自由的,其中所有代码必须都是自由的。但不仅 限于代码。由于文档文件包含手册、自述( README)、更新日志等,这 些都是软件包的必要的技术组成部分,它们必须也是自由的3。一个软件包通常与很多其他软件包一起使用,并且与其中的一些进行交互。与非自由软件进行的何种交互才是伦理上可接受的呢? 1参见《什么是自由软件?》(p.1)一文以获知自由软件的完整定义2我的文章《避免破坏性的妥协》(p.311)详细论述了这一问题。 3参见《为什么自由软件需要自由的文档》(p.46)以获知关于这一问题的更多细节 63 ==========第81页========== 64第1部分GNU计划和自由软件 我们着手开发GNU的目的是带来一款自由的操作系统,由于在1983 年还没有这样的自由操作系统。当我们于20世纪80年代开发出最早的 GNU组件时,其中每个组件都依赖于非自由软件是不可避免的。例如,没 有任何一个C程序可以离开非自由的C编译器而运行,直到GCC可以正 常工作,并且它们也不能离开 Unix libc而运行,直到 glibc可以正常工作。每个组件都只能运行在非自由操作系统上,因为当时所有的操作系统都是非自由的。 每当我们发布一款可以运行在某些非自由操作系统上的组件时,用户将其移植到其他非自由操作系统上。从伦理上讲,这些移植并不比我们曾经用于开发这些组件的限定平台代码更坏,因此我们整合了他们的修补程序 当 Linux内核于1992年变为自由之时,它填补了GNU操作系统的最 Linux的组合成为了一种完全自由的操作系统— GNULinux。GNU和后一块空缺( Linux最初于1991年以一种非自由许可证发布) 此时,我们可以选择移除对非自由平台的支持,但是我们决定不这样做。非自由操作系统是不公的,但用户运行非自由操作系统并不是我们的过错。支持该非自由操作系统上的自由软件并不会进一步恶化这种不公并且这将是实用的,不仅对于那些非自由操作系统用户,也对于吸引更多人为开发该自由软件做贡献。 然而,在自由程序上运行非自由程序是一个完全不同的问题,因为这是在诱导用户在自由之路上倒退。在某些情况下我们完全禁止这样做 例如GCC禁止任何非自由插件2。当一个程序允许非自由扩展的时候,它 至少不应该引导用户使用它们。例如,我们更倾向于选择 Libreoffice而非 OpenOffice,由于后者提示用户使用非自由扩展,而 Libreoffice则避开了它们。我们开发冰猫( IceCat)3起初也是为了避免向用户推广由火狐( Firefox)建议使用的非自由扩展。 1参见巛 Linux和GNU操作系统》(p.75)一文以获知更多信息。 2如需获知为何GCC拒绝任何非自由插件,参见我在GCC邮件列表中的回复,它位于 https://gcc.gnu.org/ml/gcc/2014-01/msgo0247.html参见http://directory.fsforg/wiki/icecat ==========第82页========== 110应用自由软件判断准则65 事实上,如果冰猫解释如何在 MacOS上运行冰猫,这将不会引导用户去运行 MacOS。但如果它介绍了一些非自由扩展,它将会鼓励冰猫用户安装这些非自由扩展。因此,冰猫软件包及其手册和网站不应该介绍这些东西 有时一个自由软件和一个非自由软件协同工作,但其中任何一方都不是基于另一方的。我们针对这种情况的规则是,如果该非自由软件非常有名,我们应当告知人们如何使用我们的自由软件与之工作;但如果该专有软件鲜为人知,我们不应该暗示其存在。有时我们会在该非自由软件存在的情况下提供互操作支持,但避免告知用户这么做的可能性 我们拒绝任何仅可用于某一非自由操作系统的“增强组件”。它们会鼓 励人们使用该非自由操作系统而非GNU,如同自摆乌龙 GNULinuX发行版 随着 Linux内核于1992年自由化,人们开始开发 GNU/ Linux发行版( distros)。但只有少数发行版是完全由自由软件构成的 适用于软件包的规则也适用于发行版:一个符合伦理的发行版必须仅包含自由软件并且只将用户向自由软件的方向引导。但是,对于一个发行版而言,“包含”一个特定的软件包是什么意思呢? 某些发行版从二进制包安装作为其发行版一部分的软件;而其他发行版从上游源代码构建每个软件,并且从字面意义上讲,它们所包含的只是需要下载并构建的列表。对于自由的问题,发行版怎样安装一个给定的软件包并不重要;如果它将某个软件包作为可选项提供,或者它的网站这样做,我们称该发行版“包含”该软件包 自由操作系统的用户拥有对它的控制权,于是他们可以安装他们想要安装的任何东西。自由发行版提供了用户可用于安装他们自己的程序以及他们对于自由软件的修改版本的通用工具;他们也可以安装非自由软件在这些发行版中提供这些通用工具并不是伦理瑕疵,由于该发行版的开发者对于用户基于其自身的主动权获取并安装什么软件并不负有责任。然而,当开发者引导用户走向非自由软件的时候,他们对于用户安装 65 ==========第83页========== 66第1部分GNU计划和自由软件 非自由软件就应当负有责任了——例如,将非自由软件置于流行发行版的软件包列表中,或者从它们的服务器进行分发,或者将其呈现为一种解决方案而非一种问题。这正是为何大多数GNU/ Linux发行版具有伦理瑕疵的问题之所在。 自行安装软件包的用户通常具有一定的判断能力:如果我们告诉他们 Baby包含非自由代码,而 Baby是自由的”,我们可以预见他们能够留心记住哪个是哪个。但发行版是推荐给那些不了解这些细节的普通用户的。他们将会想“我应该使用他们所说的哪个呢?我想它应该是Baby”。因此,要想向公众推荐一款发行版,我们坚持要求它们的名字不能与我们所拒绝的某个发行版相似,唯有如此,我们关于仅仅推荐自由发行版的信息才能被可靠地传达。 发行版和软件包之间的另一个区别在于向其中添加非自由代码的可能性。程序开发者会仔细检査他们向其中添加的代码。如果他们决定使该程序成为自由的,他们不太会向其中添加非自由代码。不过也有例外,包括 Linux内核中添加“二进制 blobs”这样恶劣的案例,但它们与现存的自由软件相比只占一小部分。 与之相反,一个 GNU/Linux发行版通常包含数千个软件包,并且其开发者可能每年都会向其中添加数百个新的软件包。如果未能尽力避免那些包含某种非自由软件的软件包,几乎肯定会有一些非自由软件混入其中。由于自由发行版的数量很少,作为列出那些发行版的条件,我们要求每位自由发行版的开发者通过移除任何非自由代码或恶意代码来承诺保持该发行版成为自由软件。参见GNU自由操作系统发行版指导意见,它位于http//gnu. org/distros/free-system-distribution-guidelineshtml我们不要求自由软件包的开发者也做出这样的承诺,这是不现实的幸运地是,这也不是必需的。得到超过30000个自由软件的开发者的承诺 也许能够避免少数问题,但其代价是极大增加自由软件基金会(FSF)员 工的工作量;此外,这些开发者中的大部分与GNU计划并无关系,他们 也不愿意向我们做出任何承诺。因此我们只需在发现问题的时候应对这些使自由软件变为非自由软件的少数案例。 66 ==========第84页========== 110应用自由软件判断准则67 外设 计算机外设要求计算机中的软件被操作系统加载到其中以便使其工作——这些软件可以是驱动程序或固件。因此,如果一件外设可以在一台未安装任何非自由软件的计算机上使用—如果该外设的驱动程序以及任何需要由操作系统加载到其中的固件都是自由的,那么它是可接受并使用以及推荐的 验证这一点是简单的:将该外设连接到一台运行完全自由的GNU/ Linux发行版的计算机上并且观察它是否正常工作。但是大多数用户需要在购买外设之前获知这一点,因此我们在h-noae.org列出了很多外设的信息,这是一个完全自由的操作系统的硬件数据库 计算机 台计算机在不同层次上包含不同的软件。我们应当基于什么准则来判断一台计算机是否“尊重您的自由”呢? 显而易见的是:操作系统和其中的任何软件都必须是自由的。在20 世纪90年代,启动加载软件(当时是“基本输入/输出系统”,即BIOS)成 为可替换的,并且由于它运行在中央处理器(CPU)上,它与操作系统所 存在的是同一类的问题。因此,诸如固件或驱动程序,不论安装在操作系统中,或是随操作系统一起安装,或是启动加载程序都必须是自由的。如果一台计算机拥有某些要求在操作系统中安装的非自由驱动程序或固件的硬件功能,我们可能仍然能够推荐它。如果它在没有那些功能的情况下仍然可用,并且我们认为大部分人不会为了使该功能可用而被引导安装非自由软件,那么我们仍然能够推荐它们。否则我们就不能。这将是种主观判断 台计算机可能在较低的层次上带有预装的可修改固件和微码。它也可能在真正只读的存储器中拥有代码。我们决定在现今我们所使用的认证准则中忽略这些程序,这是由于如若不然就没有任何计算机可以满足,并且因为通常不会被更改的固件在伦理上与电路相同。因此我们的认证准 67 ==========第85页========== 68第1部分GNU计划和自由软件 仅仅覆盖那些运行在计算机的主处理器上且储存在非真正只读存储器中的代码。当在其他层次上运行自由软件成为可能,我们也会要求这些层次上的软件是自由的。 由于认证一款产品是对它的积极推广,我们要求它们的贩卖者以支持 我们作为回报,这可以通过谈论自由软件而非开源软件1以及将GNU和 Linuⅸx的结合体称为 GNU/Linux2来做到。我们没有义务积极支持那些不认可我们的工作或是不支持我们运动的项目。 参见http://www.fsf.org/resources/hw/endorsement/criteria以获知我们的认证准则。 网页 现在的很多网页都包含复杂的 Javascript程序并且需要它们才能工作这是一种有害的实践,因为它阻碍用户对他们自己计算的控制。更坏的是,这些程序中的大部分是非自由的,这是一种不公。 Java script代码常常窥探用户3。 Javascript已经变成了一种对用户自由的威胁。 为了解决这一问题,我们开发了 Libres,这是一种用于阻止非普通非自由的 JavaScript代码的火狐浏览器扩展(没有必要阻止简单的脚本,如果它们只是实现一些次要的用户界面特性)。我们请求网站将它们的 Javascript程序自由化并且标记其许可证以便 Libres识别。 与此同时,链接至一个包含非自由 JavaScript程序的网页是否符合伦理呢?如果我们坚决不做任何妥协,我们将只能链接至自由的 JavaScript代码。然而,很多网页即使不运行它们的 Javascript代码也能工作。此外,除了我们的链接,您会经常在其它网站遇到非自由的 Javascript代码;为了避免这些情况,您必须使用 Libres或禁用 Javascript。因此,我们决定做出让步并且链接那些不运行非自由 Javascript程序也能工作的网页,同时鼓励用户在普遍意义上保护自己不受来自非自由 JavaScript程序的威胁。1参见《如今自由软件更加重要》(p.32)和《为什么说开源漏掉了自由软件的要点》(p.90)。2参见《名字的含义?》(p.71)一文3参见巛 (JavaScript陷阱》(p.286)-文 ==========第86页========== 110应用自由软件判断准则69 然而,如果某个网页不运行非自由 JavaScript程序就不能实现其功能,链接到它将会不可避免地要求人们运行该非自由 JavaScript代码。出于原则,我们不会链接这些网页。 结论 将“软件应当是自由的”这一基本理念应用到不同场合要求不同的实 践策略。随着新情况的出现,GNU计划和FSF将会适配我们的自由准则, 不论在实践中还是理论上,都将计算机用户引向自由。通过仅仅推荐尊重用户自由的程序、发行版和硬件产品,并且宣示您的立场,您可以为自由软件运动提供它所急需的支持。 69 ==========第87页========== 70第1部分GNU计划和自由软件 ==========第88页========== 第2部分 名字的含义 名字的含义? Copyright c 2000, 2006, 2007 Richard Stallman 关于此主题了解更多,你也可以阅读我们的GNU/ Linux FaQhttp://gnu.org/gnu/gnu-linux-faq.html和本书的LInux和GNU操作系统》(p.75)一文,它讲了 GNULinux系统的历 史,和这命名的问题有关。以及另一篇文章《从未听过GNU的 GNU用户>http://gnu.org/gnu/gnu-users-never-heard-of-gnu. html 顾名则思义;我们所选的名字代表了我们所要传达的思想。一个不恰当的名字会向人们传递错误的思想。玫瑰不管叫什么闻起来总是甜的——但是如果你把它叫作笔,当人们用它写字时将会很失望。同样地,如果你把笔叫作“玫瑰”,人们可能就不知道它能做什么了。如果你把我们的操作系统称为“ Linux”,则会传达一些关于此系统起源、历史和目的的错误概念。如果你称之为 GNU/Linux,这将传达(虽然不详细)一个准确的概念。 ==========第89页========== 72第2部分名字的含义 这对我们的社区重要吗?人们是否了解系统的起源、历史和目的重 要吗?是的——因为忘记历史的人往往注定要重蹈覆辙。目前围绕GNU Linux建立起来的自由世界仍然无法保证生存;那些迫使我们开发GNU的可题并没有被彻底根除,而且他们总是想复辟。 当我解释为什么把这个操作系统称为“GNU/ Linux”比“inux”要好时,人们有时这样回应: 就算GNU工程因其工作而应该得到赞誉,但如果人们不给予 它这种赞誉,就真的值得如此大惊小怪的吗?不管是谁做的,反正工作被完成了,这不是重要的事吗?你应该心态平和,以干好工作为荣,而不是对荣誉的问题耿耿于怀 这似乎是个明智的建议,如果所有的情况都像那样,大家干完工作后都不计得失,那这建议还真是对的!但现实充满挑战,现在还不是那样对 未来想当然的时候。我们社区的力量靠的是保证自由与合作。使用GNU/ Linux这个名字是一种让人们提醒自己和他人了解这些目标的方式 虽然不考虑GNU也能写出优秀的自由软件;许多优秀的工作是在 Linux的名义下完成的。但是“ Linux”(这个名字)从它被创造的那一刻起,就与一种不对自由协作做承诺的哲学联系在一起。随着这个名字的广泛商业使用,当我们把它和社区精神相联系时,将会遇到更多的麻烦。 对自由软件来说,未来的一大挑战是来自于那些“ Linux”发行版公司,为提高易用性和增强功能,将非自由的软件添加到 GNU/Linux中。所有主要的商业发行版都这样做;没有一个让自己限于自由软件的。他们中的大多数都在其发行版中没有区分非自由软件包。很多甚至开发非自由软件并加入到其系统发行中。还有些甚至蛮横的地宣布那些“ Linux”系统是“席位许可”的,也就是可以给用户和 Microsoft windows一样的“自由”。人们用“普及 Linux”的名义替这种加入非自由软件的行为辩护—一事实是,更重视普及度而不是自由。有时这是被公开认的。例如,《连线》杂志( Wired)对 Linux magazine期刊的编辑 Robert mcmillan说,“感觉推动开源软件应该用技术,而不是政治决策”。并且 Caldera的CEO公开劝 ==========第90页========== 21名字的含义? 73 说用户放弃自由的目标,并转而为“普及 Linux”而工作1。 如果普及率指的是使用混合非自由软件的 GNU/Linux的用户数量,添加非自由软件到GNU/ Linux系统或许会增加普及率。但同时,它含蓄地鼓励社区将非自由软件当好东西接受,而忘记自由的目标。如果你的方向不对,那么车开得再快也没用。 当非自由的“附加组件”是一种库或者编程工具时,就会成为自由软件开发者的陷阱。当他们编写基于非自由软件包的自由软件时,他们的软件不能成为完全自由系统的一部分。 Motif和αt曾以这种方式诱骗了大量的自由软件,导致的问题花费数年才能解决。 Motif的一些问题直到它被废弃并不再被使用都没有完全解决。Sun公司实现的非自由Java直到现在也有类似的效果:Java陷阱2,庆幸的是大多已经修复。如果我们的社区持续向这个方向发展,将会把 GNU/Linux的未来引到自由和非自由拼接在起的地步。从现在起的五年里,我们仍然确信将会有大量的自由软件产生但如果我们不谨慎一些,用户所期望的自由软件就很难在脱离非自由软件的情况下使用。如果这事发生了,我们为自由做出的努力就前功尽弃了。如果发布自由的替代品只是简单的编程问题,随着我们社区开发资源的增加,未来解决问题可能就变得愈加简单。但是我们面临的障碍使得这更加困难:法律禁止自由软件。当软件专利岀现,并且像数字千年版权法 案(DMCA)这样的法律被用来阻止开发一些用于重要工作中的自由软件 时(例如看DⅴD或者听 Realaudio音频流),我们会发现,除了拒绝使用调用它们的非自由程序,我们自己并没有明确的方法来抵御专利和私密的数据形式。 面对这些挑战需要许多不同的努力。但是应对任何挑战,我们首先需要牢记自由协作的目标。我们不能仅仅依靠渴望强大、可靠的软件来激励人们作更多的努力。我们需要大家有一种决心,一种为他们的自由和他们的社区而战的决心 种锲而不舍的决心。 在我们的社区里,这个目标和决心主要源自GNU工程。我们就是这样 1参见 Dietmar muller于2001年7月10日发表的文章巛 Stallman: Love is not free”)http://zdnet.com/article/stallman-love-is-not-free 2参见巛“自由的桎梏-Java陷阱)http://gnu.org/philosophy/java-trap.html一文 73 ==========第91页========== 74第2部分名字的含义 的人—把自由和社区当作不可让步的事情;而那些称之为“ Linux”的组织通常不说这些。关于“inux”的杂志更是打满了非自由软件的广告;打包“inux”的公司把非自由软件添加进系统;其它公司通过开发在GNU/ Linux上运行的非自由的应用来“支持 Linux”;连“ Linux”的用户群也邀请推销员展示这些应用。人们在社区中最有可能接触到自由的理念和决心的 地方,就是在GNU工程中 但是当人们接触到它时,能体会到这与他们息息相关吗? 那些知道自已正在用的系统是源自GNU工程的人,能看到他们自身 与GNU之间有一个直接的关系。他们不会自动地同意我们的哲学,但至 少他们会看到一个严肃思考它的理由。相反,那些认为自己是“ Linux用户”的人,相信GNU工程只是“开发了被证实在 Linux中非常有用的工 具”,他们通常只了解GNU与其间接的关系。当他们接触到GNU哲学时, 就会忽视它 GNU工程是理想主义的,但是那些鼓励理想主义的人面临很大的障 碍:普遍的意识形态鼓励人们把理想主义当作“不现实的”而摒弃。我们的理想主义其实已经极其实用:这是我们拥有一个自由的GNU/ Linux操作系统的原因。喜欢这个系统的人应该知道,正是我们的理想主义实现了它如果“工作”真的做了,如果除了信誉没有其他利害攸关,也许放弃可能会更明智。但是我们没有处在那个境地。为了鼓励人们做那些需要做的工作,我们需要让我们已经做了的工作被认可。要帮助我们就请将这个系统称为 GNU/LinuX吧 ==========第92页========== 22 Linux和GNU操作系统75 Linux和GNU操作系统 Copyright o 1997-2002, 2007, 2014 Richard Stallman 每天,大量的用户在毫不知情的情况下在他们的计算机上运行着修改 版的GNU操作系统1。而这个现在广为使用的修改版的GNU操作系统通 常被称为气inux”,但是很多它的用户并不知道,它其实就是GNU计划开 发的GNU操作系统2。 Linux也确实存在,并且那些用户也确实是在使用它,不过它仅仅是这些用户所使用的操作系统的一部分。 Linux仅仅是一个内核:它就是分配你硬件设备上的资源给其他你所使用的程序的一个特殊程序。内核是操作系统中不可或缺的一部分,但是只有内核是远远不够的。内核仅能在完整操作系统的环境下才能正常工作。一般来讲,Liux会与GNU操作系统起来使用:整个系统就是添加了 Linux内核的GNU操作系统,或者简而言之, GNU/Linux。所有所谓的“ Linux”发行版其实就是GNU/ Linux发行版 很多用户并不能区分内核(即 Linux)和整个操作系统(他们也称为 Linux”)。这种混淆视听的称呼并不能帮助人们正确理解这一区别。所以人们通常会认为1991年 Linus torvalds在没有借助太多其他帮助的情况下就开发出了整个操作系统。 程序员们基本上都知道 Linux只是个内核。但是他们通常会听到别人把整个操作系统都称为 Linux,然后他们就会跟从接受以内核名称命名操作系统的传统。比如,很多人都相信当 Linus torvalds编写完 Linux内核之后,它的用户们去寻找其他与之搭配使用的自由软件时,(毫无道理地)发现用于构建类Unix系统的一切其实都已然存在。 真实的情况是,当时的他们发现了并不完全完整的GNU系统,而 1参见《自由与非自由软件的分类》查看更多有关GNU操作系统的信息(p.85)。 2详情请见 "gnU uSers Who Have Never Heard of GnuhtTp: //gnu. org/gnu/gnu-usersnever-heard-of-gnu.htmlFh"overvieWofthegNuSystem",http://gnu.org/gnu/gnuhistory.htm1。 75 ==========第93页========== 76第2部分名字的含义 这一发现决非偶然。当时已有的自由软件1加在一起一同组成了一个完 整的操作系统。这是因为GNU项目从1984年就开始致力于实现这一目 标。在GNU宣言( GNU Manifesto)2当中,我们就确立了开发一个称为GNU的类Umiⅸx的自由操作系统的目标。GNU计划的初始声明( The initial Announcement)3还包括了GNU操作系统开发计划的部分大纲。在 Linux 开始开发前,GNU几乎就要完成了 绝大多数的自由软件项目都是以“为某项具体的工作开发一款具体的软件”为目的。比如, Linus torvalds开发了类似于Unix的内核( Linux) Donald Knuth编写了一个格式化文本工具(TX);而 Bob scheifler则开发了一种窗口管理系统(Ⅹ窗口管理系统)。对于这类软件而言,衡量特定的软件对该项目的贡献是简单而自然的。 但是如果我们以这种方法去衡量GNU项目的贡献的话,我们会得出 怎样的结果呢?某个CD-ROM的供应商发现在他们的“ Linux发行版”中, GNU软件4是其中最大的必备依赖软件,约占全部源代码数量的28%,并 且还包括了构成完整操作系统不可或缺的一部分组件。而Liux自己只占3%(截至2008年,此比例仍然准确:在 gNewSense的“主源”当中, Linux 占15%,而GNU软件包占了15%)。所以如果你想以写操作系统的人命 名这个操作系统的话,最为确切的单词名字恐怕是“GNU”。 但这并不是考虑这个问题最深层次的方法。GNU项目过去不是,现在 也不是仅仅只创造某些特定软件的一个项目。它不是只开发一个C语言编 译器的项目5,虽然我们确实开发了一个C语言编译器。它也不是只开发 个文本编辑器的项目,虽然我们也做过。GNU项目是为了开发一个完全 自由的类Unix操作系统—GNU。 很多人都为自由软件做过贡献,他们理应被提名。但是问题在于这是 个完整的操作系统——并不是一个有用软件的简单集合——因为GNU 1参见《什么是自由软件?》(p.1)来获得自由软件的完整定义。 2查看“GNU宣言(GNUManifesto)位于http://gnu.org/gnu/manifesto.html3参见《GNU操作系统的初始公告》(p.29)。 4参见《自由与非自由软件的分类》了解GNU软件的更多信息(p.86)。5GCC主页http://gnu.org/software/gcc/ ==========第94页========== 22 Linux和GNU操作系统77 项目就是要创造这样一个操作系统。我们已经列出了一个完整操作系统所需软件的清单,并且我们系统性地发掘、编写,或者找人编写清单上的所有条目。我们编写了一些不太吸引人却又不可或缺的组件1,因为操作系统的正常运行不能没有这些软件。在我们系统组件中,有一部分是编程工具,并且在程序员中流行了起来。但是我们也编写了很多不是工具的软件2。我们甚至还编写了一个棋类游戏, GNU Chess,因为完整的操作系统还需要些游戏。 在90年代初期,我们已经搞定了一个除了内核之外的系统。我们其实也开始开发一个内核GnuHurd(http://gnu.org/software/hurd/hurd. htm1),一个运行于Mach的内核。开发这个内核的难度远超我们的想象; GNU Hurd在2001年终于能稳定运行了,但是距离被人们日常使用的目标仍然相差甚远3 幸运的是,因为有 Linux的存在,我们并不需要等待Hurd。在1992年, Torvalds自由化了 Linux之后,它填补了GNU操作系统中重要的最后道坎。人们从此可以将GNU操作系统4和 Linux合并使用来创造一个完全自由的操作系统 个包含 Linux的GNU操作系统,即 GNU/Linux 操作系统。去让它们能很好地协同工作并不是一件容易的事。一些GNU 组件5需要作出一些必要的改动才能和 Linux一起使用。将一个完整系统整合成一个能“开箱即用”的发行版也是一个不小的挑战。这需要解决个我们之前没有遇到过的问题—如何安装和启动系统,因为我们还没有研究到那一步。因此,制作了各种各样发行版的人们进行了大量的必要工1这些不太引人注意而不可或缺的组件包括GNU汇编器(GAS)和链接器( GNU ld),它们现在都是GnUBinutils软件包(http://gnu.org/software/binutils/)的一部分,还有 Gnutar(http://gnu.org/software/tar/)等软件。 2比如BourneagainShell(BASH)还有PostScript解析器Ghostscript(http://gnu.org/software/ ghostscript./ ghostscript.htm1),以及GNUC运行库都不是编程工具。并且GNUCash, GNOME,和 GNU Chess都不是 3参见http://gnu.org/software/hurd/hurd-and-linux.html就会明白为什么FSF开发了 GNU Hurd内核。 4参见'Linux0.01发行注记("noteSforLinuxRelease0.01,"):http://ftp.funet.fi/pub/linux/historical/kernel/old-versions/RELNOTES-001 5比如GNUC运行库(gnUCLibrary)http://gnu.org/software/libc/libc.html 77 ==========第95页========== 78第2部分名字的含义 作。但是这就像万物的规律一样,最终会有人去解决这个问题的。 GNU项目支持GNU/ Linux系统和GNU操作系统。FSF资助了重写GNUC运行库中与 Linux有关的扩展的工作,这样,最新的 GNU/Linux操作系统就能毫不修改地使用最新版本的库了。FSF还资助了 Debian gnu Linux的早期开发。 现在, GNU/Linux操作系统有非常多的发行版(英文中常称为“distros”)。它们当中的绝大部分遵从 Linux的哲学而不是GNU的哲学。不过彻底自由的 GNU/Linux发行版也是存在的1。FSF赞助了 gNewSense计算机等设备(http://gnewsense.org) 制作一个完全自由的GNU/inux发行版并不只是删去非自由软件程序。现今,原版 Linux也包含非自由程序。这些程序是在系统启动时加载进ⅣO设备的,大量的这些程序被包含在 Linux的“源代码”中。因此,维护自由版本的GNU/ Linux发行版现在还指维护一个自由版本的 Linux(http://directory.fsforg/project/linux) 不管你是否使用 GNU/Linux,请不要使用歧义词“ Linux”迷惑大众 Linux是内核,系统中主要的不可或缺的组件之一。而整个系统其实是加入了 Linux的GNU操作系统。当你提及这个组合时,请说“GNU/ Linux”这篇文章和“GNU计划”都是宣扬“ GNU/Linux”的好选择。如果你提到 Linux内核,并且你还想引用更有深度的参考资料, FOLDOC(计算机自由在线词典)http://foldoc.org/linux是一个你可以信赖的网站。 附 除了GNU,另外一个项目也独立完成了一个自由的类Unix操作系统这个操作系统叫BSD,研发于加州大学伯克利分校( UC Berkeley)。在八 十年代期间,它并不是自由的,但是在九十年代早期,它变成了自由的 1参见http://gnu.org/distros/以获得我们知道的所有完全自由的发行版的列表 ==========第96页========== 22 Linux和GNU操作系统79 现存的自由操作系统几乎是非GNU即BSD1 人们有时候会问BSD是不是也是某种版本的GNU,就像GNU/ Linux 那样。其实BSD开发者们也是得到了GNU项目的启发才使他们的代码自 由了。而且很显然这种行为是由GNU的积极分子努力游说的结果,但是 他们的代码与GNU并无太多交集。BSD操作系统现在也使用一些GNU 软件,就像是GNU操作系统及其变种也使用一些BSD软件一样。然而, 总体而言,它们是两个完全不同、分开发展的操作系统。BSD开发者没 有采用编写内核然后放进GNU操作系统的做法,所以将BSD称为GNU/ BSD很显然是不合适的2。 撰写此文时,一个类 Windows的接近全部自由的操作系统已经开发了出来,但是从技术角度来讲,它不像GNU或者Unix,所以并没有受此问题的影响。 Solaris的大部分内核都已自由开放,但是如果你想基于 Solaris实现一个完全自由的操作系统,除了需要替换内核中缺 失的实现外,还需要放进GNU或者BSD当中 2从另一个方面来讲,在此文撰写的这几年间,GNUC运行库已经被移植到了很多版本的 BSD内核上,这为集成GNU操作系统到该内核上带来了方便。就像 GNU/Linux那样,GNU还有好多个变种,比如GNU/ kFreeBSD和GNU/ nEtbSD。普通桌面用户可能不好区分GNU Linux和GNU/*BSD。 79 ==========第97页========== 80第2部分名字的含义 自由软件 公有领域软件 专有软件 (有代码) 宽松许可证的软件 公有领域软件 (没有代码) Copyleft软件 GPL许可证的软件 开源软件 共享软件 自由下载的软件 图21:自由与非自由软件的分类 自由与非自由软件的分类 Copyright◎1996-1998,2001,2006,2007,2009,2011,2012,2014,2015自由软件基金会。本文最初于1996年发表于http://gnuorg 参见《应避免使用(或慎用)的词语,由于它们是不公正的或者引起混淆的》(p.107)一文 本图最初由Chao-Kuei创作并且经过其他人的更新,解释了不同类别的软件之间的区别。现有它的矢量图版,位于http://gnu.org/philosophy/category.svg(以及中文矢量图版,位于https://www.gnu.org/philosophy/category ==========第98页========== 23自由与非自由软件的分类81 zh-cn.svg以及XFg格式版本,位于http://gnu.orgphilosophy/ category.fig。本图采用GNU通用公共许可证 ( GNU GPL)20或更高版本、GNU自由文档许可证( GNU FDL)12或更高版本、或者创作共用-署名相同方式共享( CCBY-SA) 许可证2.0或更高版本。 自由软件( Free software) 自由软件是指附带这样许可的软件:它允许任何人使用、复制和/或再分发,不论是逐字再分发还是再分发带有更改的版本,也不论免费还是有偿。特别地,这意味着源代码必须可获得。“如果它不是源代码,它就不是程序。”这是一种简化的描述;您可以在《什么是自由软件?》(p.1)找到自由软件的完整定义 如果一个程序是自由的,它就有可能被包含在一种自由的操作系统中,例如GNU,或者 GNU/Linux操作系统的自由版本 还有很多种方式可以使程序成为自由的——很多细节的问题,对这些问题可以有多种方式的决定,而仍然能够使程序成为自由的。一些可能的变体将会在下文进行描述。如果需要获得关于具体的自由软件许可证的信息,参见许可证列表页面http://gnu.org/licenses/license-list.html 自由软件关乎的是自由而非价格。但是私有软件公司一般使用“freesoftware”这一短语来指代价格。有时它们的意思是您可以免费获得一份二进制副本;有时它们的意思是在您所购买的计算机上捆绑了一份副本,而整台计算机的价格包含了二者各自的价格。不管是哪种方式,这都与我们 在GNU计划中所指的自由软件无关 由于这种潜在的混淆,当一家软件公司宣称它的产品是“ free software”的时候,务必查看实际的发布条款以确认用户是否真正拥有自由软件所蕴含的所有基本自由。有时它真的属于自由软件,有时它不是。 很多语言都拥有两个独立的单词用来表示“free”中的自由和零价格的免费。例如,法语中有“ libre”和“ gratuit”。而英语则不是;在英语中确实1参见巛 Linux和GNU操作系统》(p.75)一文以获得更多信息 81 ==========第99页========== 82第2部分名字的含义 有一个单词“ gratis”用于无歧义地表示价格,但没有普通的形容词用于无歧义地表示自由。因此,如果您说另一种语言,我们建议您在将“fre”翻译为您的母语的时候澄清其涵义。参见我们整理的将“ free software”这短语翻译为多种其他语言的详细列表(见附录B(p.341)) 自由软件常常比私有软件更可靠1。 开源软件( Open Source Software 开源软件”这一短语被某些人用于指代与自由软件或多或少地相同的类软件。它们并不是与自由软件严格一致的一类软件:它们接受某些在我们看来约束性过强的许可证(条款),也有一些自由软件许可证(条款)是它们所拒绝接受的。然而,两者外延的差别并不大:几乎所有的自由软件也符合开源软件定义,并且几乎所有的开源软件也是自由的 我们倾向于使用自由软件这一概念,由于它代表自由——这是“开源这一短语所不能体现的2。 公有领域软件( Public domain software) 公有领域软件是指不受版权保护的软件。如果源代码也在公有领域中,这将成为一种非左版自由软件的特例。这意味着某些副本或者修改版本可能完全不是自由的 在某些情况下,可执行程序可能位于公有领域中,但源代码不可获得。这不是自由软件,由于自由软件要求源代码的可获得性。与此同时,大部分自由软件不在公有领域中,它们是受版权保护的,并且版权持有人通过使用自由软件许可证合法地赋予任何人使用它们的自由许可 有人以一种不严格的方式来使用“公有领域”这一概念来指代“自由或“免费得到”。然而,“公有领域”是一个法律概念,准确表示“不受版权保护”之意。为了澄清,我们建议将“公有领域”仅仅用于它所严格指代的1参见“自由软件更值得信赖!”一文,位于http://gnu.org/software/reliability html 2参见《为什么说开源漏掉了自由软件的要点》(p.90)一文 ==========第100页========== 23自由与非自由软件的分类83 涵义,而使用其他短语来指代其他涵义 根据伯尔尼保护文学和艺术作品公约(大多数国家已经签署)1,任何写下的东西自动获得版权,这也包括计算机程序。因此,如果您想要使您的程序进入公有领域,您必须采取某些法律步骤以放弃其版权;否则该程序是受版权保护的 左版软件( Copylefted Software) 左版软件是一类自由软件,其发布条款可以保证它所有版本的所有晶本都或多或少带有相同的发布条款。例如,这意味着左版许可证普遍禁止他人为该软件添加额外的限制条款(尽管有限的一些安全的附加条款可能被允许),并且要求源代码可获得。这可以保护该程序及其修改版本,使得常见的某些方式无法将其变为私有软件 些左版许可证例如GNU通用公共许可证( GNU GPL)第三版阻止 了其他一些私有化的方式,例如Tvo化( tivoization)2 在GNU计划中,我们为我们所写的几乎所有软件使用了左版许可证, 由于我们的终极目标是赋予每位用户自由软件所蕴含的所有基本自由。参见我们关于左版的文章《什么是 Copyleft?)(p.22)以获知关于左版许可证如何发挥作用以及我们为何使用它们的更多解释。 左版是一个通用的概念,为了以左版许可证发布一个实际存在的程序,您需要使用特定的一系列发布条款。有多种可能的方式编写左版发布条款,因此原则上可以有很多种左版自由软件许可证。然而实际上几乎所 有左版软件都使用 GNU GPL。两种不同的左版许可证通常不兼容,这意 味着直接将使用一种许可证的代码与使用另一种许可证的代码合并将会是非法的;因此,人们使用同一种左版许可证将会有利于社区 1《伯尔尼保护文学和艺术作品公约》(法语: Convention de berne pour la protection desceuvres litteraires et artistiques),简称《伯尔尼公约》,是关于著作权保护的国际条约。《公约》生效至今(2013年)进行过8次补充和修订,共有167个签约国。—译者注,摘自维基百科2参见《为何升级到GPL3》(p.244)以获得更多信息 83 ==========第101页========== 84第2部分名字的含义 非左版的自由软件( Noncopylefted Free Software) 非左版的自由软件带有来自作者的再分发和修改的许可,也带有添加额外限制条款的许可。 如果一个程序是自由的但并未釆用左版许可证,那么某些副本或者修改版本可能完全不是自由的。软件公司可以编译该程序,不论是否对其进行修改,都可以将可执行文件作为私有软件产品发布 Ⅹ Window系统阐释了这一点。X联盟将X11以某种非左版发布条款发布,使其成为非左版的自由软件,并且后续开发者几乎沿用了相同的方式。一份带有此类发布条款的副本是自由软件。然而,也有私有版本的存在,并且确实有(或者至少确实曾经有)流行的用于工作站或个人计算机 (PC)的图形显示卡仅支持私有版本。如果您使用的是这类硬件,那么X11 对您来说不是自由软件。X11的开发者甚至曾经在一段时期将Ⅹ11作为私 有软件发布;他们之所以能够如此,是由于其他人使用相同的非左版许可证贡献了他们的代码 使用包容型许可证的软件(① Lax permissive licensed software) 包容型许可证包括X11许可证和两种BSD许可证2。这些许可证几乎 允许对其代码进行任何方式的使用,包括发布私有的二进制版本,不论是否更改了源代码。 使用GPL许可的软件( GPL-Covered software) GNU GPL是一类特定的发布条款集合,用于使该程序成为左版软件 GNU计划将其用作大部分GNU软件的发布条款 因此,将自由软件等同于使用GPL许可的软件是一种错误。 1参见《 X Window系统的陷阱》(p.216) 2参见"Thebsdlicenseproblem一文,位于http://gnu.org/philosophy/bsd.html ==========第102页========== 23自由与非自由软件的分类85 GNU操作系统( The gNu Operating System) GNU操作系统是一种“类Unⅸx操作系统”,它完全由自由软件构成, 我们在GNU计划中于1984年开始GNU操作系统开发1。 款类Unⅸ操作系统由众多程序构成。GNU操作系统包括所有GNU程序包。它还包括很多其他程序包,诸如Ⅹ Window系统以及TⅩ,它们 不是GNU软件 完整的GNU操作系统的首个测试版于1996年发布,它包括GNU Hurd,我们的内核,后者于1990年开始开发。直到2001年,GNU操作系统(包括 GNU Hurd)开始能够相对可靠地运行,但是Hurd仍然缺少一些重要功能,因此它不能被广泛使用。与此同时, GNU/Linux操作系统,作为使用Liux内核而非Hurd内核的GNU操作系统的衍生版本,自20世 纪90年代起已经获得了巨大成功2。这表明了GNU操作系统不是一个静 态的程序集合;用户和再分发者可以根据他们的需求和偏好来选择不同的 软件包。其结果仍是一种GNU操作系统的变体 由于GNU操作系统的目标是自由,GNU操作系统中的任何一个组件 都是自由软件。但是,它们不必须都是左版的,任何类别的自由软件都可以被合法并且合适地包含进来,如果它有助于实现技术上的目标。 GNU程序( GNU Programs) “GNU程序”是GNU软件的同义词。若程序foo是一个GNU程序,那 么它也是一个GNU软件。我们有时也称之为GNU软件包 1参见“GNU系统概览”一文,位于http://gnu.org/gnu/gnu-history.htmi以获知更多历史背景 2参见巛 Linux和GNU操作系统》(p.75)一文以获得更多信息 85 ==========第103页========== 86第2部分名字的含义 GNU软件( GNU Software) “GNU软件”是指在GNU计划支持下发布的软件1。如果一个程序是 GNU软件,我们也可称之为GNU程序或GNU软件包。GNU软件包的自 述文件( README)或手册应当声明它是一个GNU软件包;同时,自由 软件目录标识了所有GNU软件包。 大部分GNU软件是左版的,但不是全部;然而,所有GNU软件都必 须是自由软件。 有些GNU软件是由自由软件基金会(FSF)员工所编写的,但是大 部分GNU软件来自众多志愿者3(某些志愿者由商业公司或者大学支付薪 酬,但他们确实是我们的志愿者)。某些贡献的软件由FSF拥有版权,有 些由编写它们的贡献者拥有版权 FSF拥有版权的GNU软件(FSF- Copyrighted GNU Software) GNU软件包的开发者可以选择将版权转让给FSF或者自己保留。这 是他们的选择权利。 如果他们将版权转让给FSF,该程序成为FSF拥有版权的GNU软件, 此时FSF可以强制实行它的许可证。如果他们选择自己保留版权,强制实 行其许可证是他们自己的责任。 FSF不会接受非官方GNU软件包的软件的版权转让,这是一条规定 非自由软件( Nonfree software) 非自由软件是指任何不是自由软件的软件。它的使用、再分发或修改被禁止,或者要求您请求授权许可,或者被严格限制以致于您事实上不可1参见“GNU系统概览”一文,位于http://gnu.org/gnu/gnu-history.html以获知更多历史背景。 2参见http://directory.fsf.org 参见http://gnu.org/people/people.html 86 ==========第104页========== 23自由与非自由软件的分类87 能自由地进行以上行为。 私有软件(或译为“专有软件”, Proprietary Software) 私有软件是非自由软件的另一种叫法。在过去,我们曾将非自由软件进一步细分为“半自由软件”( semifree software),它们允许非商业性的修改和再分发;以及私有软件,它们禁止任何修改或再分发。但我们现在已经放弃了这种区分,并且现在将“私有软件”用作非自由软件的同义词。 FSF遵循这样的规则∷我们不能在自己的计算机上安装仼何私有软件, 除非暂时性地用于一种特定用途,即编写一个自由软件来取代它。除此之外,我们感觉没有任何可能的借口来安装一款私有软件 例如,在20世纪80年代,我们认为在我们的计算机上安装UnX是合理的,由于我们需要用它编写一个可以取代Unⅸx的自由操作系统。而现在,由于自由的操作系统已经有了,因此这一借口不再适用;我们不会使用任何私有操作系统,并且我们所组装的任何一台新计算机都必须运行一款完全自由的操作系统 我们并不坚持要求GNU的用户或者贡献者也必须严格遵守这条规则。 它只是我们对自己制定的规则。但我们希望您也愿意遵循它,为了您自己的自由。 免费软件( freeware) Freeware”这一短语没有明确并且公认的定义,但它通常被用于指代那些允许再分发但禁止修改(并且其源代码不可获得)的软件包。这些软件包不是自由软件,因此请您不要使用“ freeware”来指代自由软件。 共享软件( Shareware) 共享软件是指那些附带有允许人们再分发副本的许可协议的软件,但它宣称任何人如果想要继续使用其一份副本就必须支付一笔授权许可费用。 87 ==========第105页========== 88第2部分名字的含义 共享软件不是自由软件,甚至不是半自由软件。有两大原因 ·对于大多数共亨软件,源代码不可获得;因此,您完全不能修改它 共享软件并不带有允许人们在不支付授权许可费用的条件下复制副本并且安装它们的许可条款,甚至对于那些从事非盈利性活动的个人用户也不提供这样的许可(实际上,人们经常不遵守这种发布条款并且仍然这样做,但许可条款并不允许) 私人软件( Private software) 私人软件或者定制软件是指专为某一特定用户(通常是一家组织机构或者商业公司)开发的软件。该用户保存和使用它,并且不会以源代码或者二进制格式将其对公众发布。 款私人软件可以是自由软件(尽管这对他人帮助不大),如果它的终极用户拥有四项基本自由。特别地,如果其用户对私人软件拥有完整的权利,该软件就是自由的。然而,如果用户向其他人分发副本但不随之提供四项基本自由,那些副本就不是自由软件 自由软件关乎的是自由,而非可获得性。总的来说,我们不认为开发款软件但不发布它是一件坏事。确实有这样的情况,若一款软件举足轻重,以至于人们要争论,独占这款软件而拒绝对公众发布是在对全人类犯错。然而,这样的情况毕竞罕见。大部分软件并非如此生死攸关,拒绝将它对公众发布并不是特别地坏。因此,开发私人软件或者定制软件的实践与自由软件运动的原则之间并无冲突 几乎所有受雇佣的程序员都在开发某种定制软件;因此大部分编程工作就是或者可以是一种与自由软件运动相容的方式完成的 商业软件( Commercial software) 嘀商业”和“私有”并不等同!商业软件是由企业作为其业务的一部分所开发的软件。大部分商业软件是私有软件,但确实也有商业化的自由软 ==========第106页========== 23自由与非自由软件的分类89 件,并且也有非商业化的私有软件 例如, GnU Ada编译器是由一家商业公司开发的。它一直以GNU GPL的条款发布,每一份副本都是自由软件;但它的开发者贩卖其支持合 同。当它们的销售员同潜在的客户交谈时,有时客户会说“我们更加信赖商业化的编译器”。销售员回答说< GnU Ada确实是一款商业化的编译器; 它恰好也是一款自由软件”。对于GNU计划,上述优先级应该是另一种顺 序:重要的是 GNU Ada是一款自由软件;它同时也是一款商业软件只是细节。然而,由于其作为一款商业软件而带来的额外发展是大有裨益的。请您帮助我们宣传这种认识:自由的商业软件是可能的。您可以努力通过在您想要表达“私有”的时候避免使用“商业”来达到这样的效果 89 ==========第107页========== 90第2部分名字的含义 为什么说开源漏掉了自由软件的要点 Copyright o 2007, 2008, 2010, 2012-2015 Richard Stallman Ikx最早于2007年发布于http://gnu.org 当我们说软件“自由”的时候,我们意指它尊重用户最根本的自由:即运行、学习和修改软件,或者重新发布软件副本(无论是否修改过)的自由。这是一个关于自由的问题,而非价格。因此我们应该理解为“言论自由”,而不是“免费啤酒” 这些自由极其重要。它们是必要的,不仅是因为它们满足用户的个体利益,更是因为它们促进社会的团结也就是分享与协作。由于我们的文化和生活变得越来越数字化,因此这些自由就变得越来越重要了。在个由数字化的声音、图像和文字组成的世界里,自由软件正在逐渐地趋近于通常意义上的自由。 现在全世界有数以千万计的人使用自由软件;印度和西班牙的一些学校正在教授所有的学生使用自由的 GNU/Linux操作系统2。但是,大多数用户都没有听说过我们开发这个系统以及建立自由软件社区的伦理原因,因为现在这个系统和社区更多地被描述为“开放源代码”(简称“开源”),并将其归属为另一种不同的、几乎不提及自由的哲学。 自1983年以来,自由软件运动一直为计算机用户的自由而战。1984 年,我们发起开发自由的操作系统GNU,避免那些否定用户自由的非自由 操作系统。在(二十世纪)八十年代,我们开发出了这个系统的重要组件, 还有GNU通用公共许可证( GNU GPL)—个专门用于保护所有用户 自由的许可证 并不是所有的自由软件用户和开发人员都认同自由软件运动的目标。1998年,一部分人从自由软件社区中分裂出去,并且开始了以“开源”为旗号的运动。提出“开源”这个说法原本是为了避免“ free software”可能产生的一些误解,但却很快就与自由软件运动的哲学观点分道扬镳了。1有关自由软件的完整定义,参见《什么是自由软件?》(p.1)一文2关于操作系统可参见《 Linux和GNU操作系统》(p.75)一文 ==========第108页========== 24为什么说开源漏掉了自由软件的要点91 些“开源”的支持者认为它是“自由软件的商业市场运动”,因为突出现实利益能吸引商业执行部门,并且避免纠缠于他们不想听的是非观点。其他支持者甚至断然否定自由软件运动的伦理和社会价值观。不管他们的观点是哪一种,“开源”运动中都没有谈起或提倡这种价值观。“开源”这个说法很快便与一些现实想法和论点勾连在一起了,比如构建强大而稳定的软件。从那时起许多“开源”的支持者也因此而加入其中,并持同样观点。 自由软件和“开源软件”这两个说法其实说的几乎都是同一类软件,但是它们所秉持的价值观是根本不同的。开源是一种开发方法论,自由软件是一场社会运动。对自由软件运动而言,自由软件是一种道义责任,尊重用户最根本的自由。而另一方面,开源的哲学更关注如何让软件“更好”—只关心实用价值。开源认为,非自由软件只是手边问题的欠妥解答,关于“开源”的大多数讨论并不关注对与错,只关注知名度和成功。然而自由软件运动中,非自由软件是一个社会问题,解决方案就是停止使用并转向自由软件 “自由软件”,“开放源代码”,如果指代的是同样(或几乎相同2)的软件,你用什么名字很重要吗?是的,因为不同的文字传达了不同的理念。虽然现在一个以其他方式命名的自由程序能给你同样的自由,但是可持续地构筑自由依赖于教育人们珍惜自由。如果你愿意提供帮助,最基本的就是提到“自由软件”。 自由软件运动中我们并不把开源阵营看作敌人;敌人是专有(非自由)软件。但是我们希望人们知道我们代表自由,所以我们不能接受把我们和开源支持者混为一谈。 1一个典型的例子,比如 Jay lyman的文章“ Open Source Is Woven Into the latest,Hott Trends"(2013年9月12日)http://www.linuxinsider.com/story/open-source-is Woven-Into-the-Latest-Hottest- Trends -78937html 2参见“ How Free Software and Open Source relate as Categories of Programs”一文,位于http://gnu.org/philosophy/free-open-overlap.html 91 ==========第109页========== 92第2部分名字的含义 自由软件和开放源代码的实际差别 实际上,开源的标准比自由软件要弱一些。据我们所知,目前所有的自由软件都算是开源软件。几乎所有开源软件也都是自由软件,但也有例外。首先是一些开源许可证过于严苛,因此并不能认定为是自由许可证。比如“ Open Watcom”的许可证就不是自由的,因为它不允许将修改后的软件私人使用。幸运的是,只有很少一些程序使用这样的许可证。 其次,实践中更重要的一点是,很多产品包含了计算机可以检查可执行程序签名的方法,以便阻止用户安装其它版本的可执行程序。只有这个有特权的公司可以构建能在设备上运行,或允许访问其全部功能的可执行程序。这种设备我们称之为“暴君”( Tyrants),而这种行为称之为“tivo化”( tivoization),以我们第一次看见这样做的产品(Tivo)而得名。即使可执行文件是从自由的源代码构建出来,用户却无法运行修改版,所以这个可执行文件也是非自由的 开源标准并没有认识到这个问题。它只关注源代码的许可证问题。因此,从比如像 Linux这种开源且自由的源代码构建,却不可修改的可执行文件只是开源软件但不是自由的。很多 android产品包含了这种基于 Linux的非自由tivo化的可执行文件 对κ自由软件”和“开放源代码”的常见误解 术语“ free software”容易被误解:一个下意识的理解,“你可以无偿得到的软件”,而其真正含义“给予用户真正自由的软件”同样与其名称相符。我们通过广为散播自由软件的定义和强调“理解fee为‘自由的言论’,而并非‘免费啤酒”’,来解决这个问题。这不是一个完美的解决方法;它不能完全排除这个问题。如果它没有其它问题的话,也许一个没有歧义且正确的说法会更好一些。 然而很不幸,英语里所有可选的说法都存在各种问题。我们曾看到过很多这种情况,人们收到很多建议,但没有一个是明显“正确”的选择。(例如,在某些环境中法语和西班牙语单词“自由”是有效的,但印度 ==========第110页========== 24为什么说开源漏掉了自由软件的要点93 人却完全不认可。)每个提交的用来替代“自由软件”的词语都存在一些语义问题——这也包括“开源软件”。 开放源代码软件”的官方定义(由开放源代码促进会公布,这里引用太长了1)是间接引述自我们的“自由软件”的标准。与自由软件不同;在些方面稍微有点宽松。尽管如此,他们的定义大多数情况还是非常接近我们的定义的。 然而,“开源软件”这个概念表面的意思是“你可以看源代码”,因此多数人似乎都把这当作它的真正意义。这个标准比自由软件更脆弱,甚至比开源的官方定义都脆弱。这样就包括了很多既不自由也不开源的软件 由于“开放源代码”的表面含义并非拥护者们所设想的,结果大多数人曲解了这个说法。以下是撰稿人 Neal Stephenson所定义的“开源”:“LiuX是开源’软件的意思,简单地说,就是任何人都可以得到源代码的副本2。”我并不认为他有意抵触或者争论官方的定义。我想他只是用了英语的习俗来提岀开源的含乂。堪萨斯洲曾经发表过类似的定义:“使用开源软件 (OSS)。开源软件是源代码可自由、公开使用的软件,但特定的许可证规 定了人们可以用代码做些什么3”。 《纽约时报》的一篇文章引申了开源的意思,认为开源就是让用户做测试4让一小部分用户测试产品的早期版本并给出反馈——而这已经是专有软件数十年来一直在做的事情。 1全部定义可参见http://opensource.org/docs/osd 2 Neal Stephenson, n the beginning. Was the command line(纽约, Harper Collins出版,199年),p49 3堪萨斯州全州技术架构,“信息架构”, version8.0,20.3.8,2011年10月11Hohttps://web.archive.org/web/20001011193422/http://da.stateks.us/itec/ TechArchPt6ver80. pdf 4 Mary Jane Irwin,“ The brave New World of Open-Source Game Design”(开源游戏设计的勇敢新世界),纽约时报,在线版2009年2月7日http://www.nytimes.com/external/gigaom/2009/02/07/07gigaom-the-brave-new-world-of-open-source-game-design37415.htm1 93 ==========第111页========== 94第2部分名字的含义 这个说法还被引申为设计和发布没有专利的产品1。无专利的设备对社会而言确实值得称赞,但是“源代码”并不属于这些。 开源的支持者们试图通过指出他们的官方定义来应对这个问题,但收效甚微,甚至还不如直接用“自由软件”。“ free software”这个说法天生就只有两种含义,其中一个是我们设想的含义,所以领会了“言论自由,而并非免费的啤酒”的人就不会曲解它。但是“开源”只有一个天然的含义,但是这个含义却和它的支持者们预想的不同。所以不存在一个一劳永逸的方法来解释和证明其官方定义。这就产生了更大的歧义 另外一个关于“开源”的误解认为它的意思是“不使用 GNU GPL”。这 还会产对一个对“自由软件”的误解,认为自由软件就是“GPL许可证保护 的软件”。这样都不对了,因为 GNU GPL被当作是一个开源许可证,而大 多数开源许可证被当作是自由软件许可证。而且还有很多不是 GNU GPL 的自由软件许可证2。 “开放源代码”甚至已经被引申和应用到了其他活动中,比如政府、教育和科学,那些没有源代码的,与软件的标准并不相关的领域。这些活动唯一的共同点是他们只是以某种方式邀请人们参加。而目前为止这个概念只是被引申成了“参与”或“透明”而已,甚至更浅。在最坏的情况下,它已经成为一个空洞的流行语3。 不同的价值观会得出类似的结论.但并非总是如此 在二十世纪六十年代,激进组织因为派别纷争而获得一些声誉:一些组织因为对策略上细节的分歧而导致分裂。尽管依然有着相似的基本目标KArl Mathiesen FH Tess riley, "Texas Teenager Creates $20 Water Purifier to Tackle Toxic E- Waste pollution”(德州青少年创建$20水净化器,以解决有毒电子废物污染环境),2015年8月27日http://theguardian.com/sustainable-business/2015/aug/27/texasteenager-water-purifier-toxic-e-waste-pollution 2参见variOusLicensesandCommentsaboutThemhttp://gnu.org/licenses/license list. html EvgenyMorozov,"OpenandClosed"(开放和封闭)2013年3月16日http://wwwnytimes. com/2013/03/17/opinion/sunday /morozov-open-and-closed html ==========第112页========== 24为什么说开源漏掉了自由软件的要点95 和价值观,但是分裂出来的两个组织往往把对方当作敌人。右翼利用了这点,来抨击整个左派。 有些人试图把我们和开源之间的分歧比作这些激进组织之间的分歧,以此来诋毁自由软件运动。但是他们完全错了。我们虽然和开源阵营在根本目标和价值观上无法达成共识,但是他们和我们的观点在许多情况下是样的,都引领了实际行动——比如开发自由软件 结果是,来自自由软件运动和开源阵营的人们经常在一些诸如软件开发的实际项目中协同工作。不同的哲学观点能够如此频繁地激励不同人参与到相同的项目中,这是非同寻常的。不过因为这些观点相差很大,所以也存在导致行为相差很大的情况 开放源代码的理念是允许用户修改和重新发布软件以使它更强大、更可靠。但是这些并不能得到保证。专有软件的开发者们并不一定就不称职。有时他们开发的程序也是强大而且可靠的,尽管它并没有尊重用户的自由。自由软件积极分子和开源爱好者对此的反应是非常不同的。 个从未受到自由软件思想影响的纯开源爱好者,会说:“我非常惊讶你们不使用我们的开发模式,居然能让程序工作得这么好,但是你们确实做到了。我怎样才能得到一份副本呢?”。这种态度会鼓励那些夺走我们自由,或有损自由的项目。 自由软件积极拥护者会说:“你的程序很吸引人,但我更珍视我的自由。所以我抵制你的程序。我会以其他方式努力,支持一个开发自由替代品的项目。”如果我们珍视我们的自由,我们就能行动起来保卫它 强大而可靠的软件可能是件坏事 我们想让软件变得强大而可靠的想法,来自“软件是被设计用于服务其用户”的假设。如果软件强大而可靠,这意味着它将更好地服务于用户。然而只有在软件尊重了用户的自由时,才能说它服务于用户。如果软件被设计的目的是使用户枷锁缠身会怎样呢?那样的话,强大仅仅意味着枷锁套得更紧,而可靠则使枷锁更难去除。恶意的功能,比如针对用户的间谍行为、限制用户、后门和在专有软件里很常见的强制性升级,甚至有 95 ==========第113页========== 96第2部分名字的含义 些开源的支持者也想实现这些。 在电影和唱片公司的压力下,个人使用的软件逐渐被有意地设计成 能够限制用户的软件。这种恶意的特征被称为DRM或者数字限制管理 ( Digital Restrictions Management,参见 DefectiveLy Design.org),而这正是与自由软件所要提倡的自由精神相对立的。并且不仅仅在精神上:因 为DRM的目标是践踏你们的自由,DRM的开发者们试图使你修改实现了 DRM的软件变得困难、或者不可能,甚至非法。 然而,一些开源支持者提出了所谓“开源DRM软件。他们的想法是, 通过公开并允许人们修改那些被设计成用来限制你访问加密媒体的程序的源代码,生产更加强大、可靠的软件来限制像你这样的用户。然后,再将这些程序放到那些不允许你修改的设备中发布。 这种软件或许是开放源代码的,而且使用了开源的开发模式,但它并不是自由软件,因为并没有尊重实际运行它的用户的自由。如果开源开发模式通过开发更强大和更可靠的软件来限制用户而获得了成功,这将使它变得更糟糕 对自由的敬畏 起初,开源阵营从自由软件运动中分裂出来,是因为“自由软件”的伦理观念使一些人不安。这的确是事实:谈论关于自由、道义问题、可靠性和方便性,提醒人们去考虑那些可能被他们忽略的问题,比如他们的行为是否是道德的。这会引起不舒服,而且一些人甚至会回避它。但这并不意味着我们应该停止讨论这些事情。 然而,这正是开源的引领者决定要做的。他们希望停止对伦理规范和自由问题的讨论,而仅仅关注某个自由软件直接的实际利润,这样,他们或许就能更有效地将软件“卖”给某些用户,特别是商业用户。 用他们自己的话说,这种方法已经被证实是有效的。开源的修辞方式已经吸引了许多商业和个人用户来使用、甚至开发这些壮大我们社区的自由软件——但仅仅是在表面的、实用上的。开源哲学,和它纯粹的实用主义价值观,阻碍了人们对自由软件更深层观点的理解;它将许多人带进了 ==========第114页========== 24为什么说开源漏掉了自由软件的要点97 我们的社区,但却没有教他们去捍卫社区。就目前的现状来看还是不错的,但是它不足以捍卫自由。要吸引自由软件用户,需要让他们成为个体自由的捍卫者 迟早这些用户会因为一些实际利益而转向专有软件。无数的公司试图提供这种诱惑,有些甚至提供免费副本。为什么用户会减少?只有他们领悟了自由软件所赋予用户的自由,去珍惜自由的价值,而不只关心特定自由软件在技术上和实用性上的方便性价值,他们就会明白了。为了传播这种思想,我们必须谈论自由。对商业采取一定的沉默方式对于社区来说是有益的,但是,如果大家普遍地把对自由的热爱看作是一种怪癖,那将是很危险的。 这种危险确实已经发生。大多数投入自由软件的人,特别是发行者,很少谈论“自由”通常是因为他们追求“更容易被商业接受”。几乎所有的 GNU/Linux操作系统发行版都在基本的自由系统上加入了专有软件包,而且他们让用户认为这是优点,而不是与“自由”思想背道而驰的 加入专有版权的软件和部分非自由的 GNU/linux发行版之所以找到了孕育的温床,是因为我们的许多社区没有在他们的软件上贯彻自由。这并巧合。大多数GNU/inux的用户是通过讨论“开源”而引入到这个系统的,而这些讨论却并没有将“自由”作为目标。那些不支持自由的行为和不探讨自由的言论并肩而行,相互促进。为了避免这种趋势,我们需要更多地,而不是更少地,来谈论“自由”